Objective-C中,有时使用静态字符串常量来定义备用API键是有用的(例如,区分分析包的发布键和调试键,如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?

推荐答案

苹果从Xcode 8开始就完全支持Swift预处理器标志,因此不再需要在"其他Swift标志"中设置这些值.

新设置称为"活动编译条件",它为Swift等价的预处理器标志提供顶级支持.您使用它的方式与使用"其他Swift标志"的方式完全相同,只是不需要在值前面加"-D"(因此它只是稍微干净一点).

Xcode 8 release notes人中:

Active Compilation Conditions是一个新的构建设置,用于将条件编译标志传递给Swift编译器.该设置值的每个元素传递给以-D为前缀的swiftc,就像Preprocessor Macros元素传递给以相同前缀的clang一样.(22457329)

enter image description here

您可以这样使用上述设置:

#if DEBUG
    let accessToken = "DebugAccessToken"
#else
    let accessToken = "ProductionAccessToken"
#endif

Swift相关问答推荐

如何在自定义视图中读取修改符子元素?

使用序列初始化字符串的时间复杂度是多少?

使用变量(而非固定)的字符串分量进行Swift正则表达式

Xcode创建GitHub仓库,但未推送所有文件

除法中如果除以完全因数需要更长时间吗?

使用View()和List()无法显示影子

如何制作一个在 SceneKit 中投射阴影的透明物体?

URL appendPathComponent(_:) 已弃用?

TextField 键入未完成

Swift-SceneKit-无法从art.scnassets加载.scn文件

如何 for each 用户制作一个单独的按钮,以便在按下它时切换 isFollowingUser Bool 并更改为关注?

SwiftUI Grid 中的数组旋转

将阻塞函数集成到 Swift 异步中

找不到接受提供的参数的/的重载

使用 Swift 在 iOS 8 中为应用程序图标添加徽章

如何在 Swift 中将 UILabel 居中?

自定义 Google 登录按钮 - iOS

使用相机进行人脸检测

如何快速格式化用户显示(社交网络等)的时间间隔?

NSLocationWhenInUseUsageDescription 警告,但我已经添加了