Swift的条件编译

在 C 系语言中,可以使用 #if 或者 #ifdef 之类的编译条件分支来控制哪些代码需要编译,而哪些代码不需要。Swift 中没有宏定义的概念,因此我们不能使用 #ifdef 的方法来检查某个符号是否经过宏定义。但是为了控制编译流程和内容,Swift 还是为我们提供了几种简单的机制来根据需求定制编译内容的。

首先是 #if 这一套编译标记还是存在的,使用的语法也和原来没有区别:

#if <condition>
#elseif <condition>
#else
#endif

当然,#elseif#else是可选的。

但是这几个表达式里的 condition 并不是任意的。Swift 内建了几种平台和架构的组合,来帮助我们为不同的平台编译不同的代码,比如:

#if os(OSX)
typealias Color = NSColor
#else
typealias Color = UIColor
#endif

还有一个arch():
它表示CPU的版本,参数有armarm64分别表示32位和62位的处理器。

另一种方式是对自定义的符号进行条件编译,比如我们的APP有多套API,生产环境一套,开发环境一套,测试环境一套,这时如果每次打包时都去修改API的话就太麻烦了,也容易出错,我们可以为生产环境和测试环境都建一个Build Configuration,然后在Building Setting中的Swift Compiler中添加一个Active Compilation Conditions就可以了:

#if PRODUCT
// 生产环境定义
#else
// 开发环境定义
#endif