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标志

在这里输入图像说明