Swift 3:如何使用PREPROCESSOR标志(如`#if DEBUG`)来实现API密钥?
在Objective-C
,使用静态string常量来定义替代API键(例如区分分析包的RELEASE和DEBUG键,如MixPanel,Flurry或Crashlytics)有时是有用的:
#if DEBUG static NSString *const API_KEY = @"KEY_A"; #else static NSString *const API_KEY = @"KEY_B"; #endif
接着…
[Analytics startSession:API_KEY];
这是如何转化为Swift的,因为Swift编译器不再使用预处理器?
Apple在Xcode 8中包含了对Swift预处理器标志的全面支持,所以不需要在“Other Swift Flags”中设置这些值。
新的设置被称为“活动编译条件”,它为Swift等价的预处理器标志提供了顶层的支持。 除了没有必要用“-D”(所以它只是一点点清洁)之外,你可以像使用“Other Swift Flags”一样使用它。
从Xcode 8发行说明 :
Active Compilation Conditions
是一个新的构build设置,用于将条件编译标志传递给Swift编译器。 这个设置的值的每个元素都传递给以-D为前缀的swiftc,就像Preprocessor Macros
元素以相同的前缀传递给clang一样。 (22457329)
你使用上面的设置,如下所示:
#if DEBUG let accessToken = "DebugAccessToken" #else let accessToken = "ProductionAccessToken" #endif
更新:Xcode 8现在自动支持,请参阅上面的@ DanLoewenherz的回应。
在Xcode 8之前,你仍然可以用同样的方法使用macros:
#if DEBUG let apiKey = "KEY_A" #else let apiKey = "KEY_B" #endif
但是为了让他们被Swift拾起,你需要在你的目标的Build Settings中设置“Other Swift Flags”
- 打开您的目标的生成设置
- search“其他快捷标志”
- 添加您希望使用的macros,前面加上
-D
标志