如何使用Swift中的Objective-C #define

我正在迁移一个UIViewController类来训练一下Swift。 我通过桥接头成功使用Objective-C代码,但是我需要导入一个包含#define指令的常量文件。

我在使用cocoa和Objective-C (简单macros)的Swift中看到了以下内容:

简单的macros

在通常使用#define指令来定义C和Objective-C中的原始常量的地方,Swift中使用全局常量。 例如,常量定义#define FADE_ANIMATION_DURATION 0.35可以在Swift中更好地expression, let FADE_ANIMATION_DURATION = 0.35 。 由于简单的常量macros直接映射到Swift全局variables,因此编译器会自动导入C和Objective-C源文件中定义的简单macros。

所以,这似乎是可能的。 我已经将包含常量的文件导入到桥接头文件中,但是我的.swift文件没有可见性,无法parsing。

我该怎么做才能让我的常量在Swift中可见?

更新:

它似乎与NSString常量,但不与布尔值:

 #define kSTRING_CONSTANT @"a_string_constant" // resolved from swift #define kBOOL_CONSTANT YES // unresolved from swift 

目前,有些#define被转换,有些则不转换。 进一步来说:

 #define A 1 

…变为:

 var A: CInt { get } 

要么:

 #define B @"b" 

…变为:

 var B: String { get } 

不幸的是, YESNO不能被Swift编译器实时识别和转换。

我build议你把你的#define转换成实际的常量,总比#define s好。

。H:

 extern NSString* const kSTRING_CONSTANT; extern const BOOL kBOOL_CONSTANT; 

.M

 NSString* const kSTRING_CONSTANT = @"a_string_constant"; const BOOL kBOOL_CONSTANT = YES; 

然后Swift会看到:

 var kSTRING_CONSTANT: NSString! var kBOOL_CONSTANT: ObjCBool 

另一种select是改变你的BOOL定义

 #define kBOOL_CONSTANT 1 

更快。 但不如实际的常数。

只是从上面几件事情快速澄清。

Swift常量使用关键字let来表示

例如:

  let kStringConstant:String = "a_string_constant" 

另外,只有在协议定义中,你可以使用{get},例如:

  protocol MyExampleProtocol { var B:String { get } } 

在swift中,可以在任何类或函数之外声明一个枚举,variables或函数,并且它将在所有类(全局)中可用(不需要导入特定文件)。

  import Foundation import MapKit let kStringConstant:String = "monitoredRegions" class UserLocationData : NSObject { class func getAllMonitoredRegions()->[String]{ defaults.dictionaryForKey(kStringConstant) } 

简单的swift语言不需要一个macros的所有#define指令。 将会让复杂的macros转换为func

macros的替代可以是全局variables。 我们可以在类之外声明全局variables,并且可以不使用类来访问它们。 请看下面的例子

导入基金会让BASE_URL =“www.google.com”

class级考试{

}