Swift 条件编译

Swift 条件编译,第1张

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

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

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

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

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

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

方法 os(),可选参数 OSX,iOS 方法 arch(),可选参数 x86_64,arm,arm64,i386

注意这些方法和参数都是大小写敏感的。举个例子,如果我们统一我们在 iOS 平台和 Mac 平台的关于颜色的 API 的话,一种可能的方法就是配合typealias进行条件编译

#if os(OSX)    typealias color = NScolor#else    UIcolor#endif

另外对于arch()的参数需要说明的是armarm64两项分别对应 32 位 cpu 和 64 位 cpu 的真机情况,而对于模拟器,相应地 32 位设备的模拟器和 64 位设备的模拟器所对应的分别是 i386 和 x86_64,它们也是需要分开对待的。

另一种方式是对自定义的符号进行条件编译,比如我们需要使用同一个 target 完成同一个 app 的收费版和免费版两个版本,并且希望在点击某个按钮时收费版本执行功能,而免费版本d出提示的话,可以使用类似下面的方法:

@IBAction func somebuttonpressed(sender: AnyObject!) {    #if FREE_VERSION        // d出购买提示,导航至商店等    #else        // 实际功能    #endif}

在这里我们用FREE_VERSION这个编译符号来代表免费版本。为了使之有效,我们需要在项目的编译选项中进行设置,在项目的 Build Settings 中,找到Swift Compiler - Custom Flags,并在其中的Other Swift Flags加上-D FREE_VERSION就可以了。

来源:http://swifter.tips/condition-compile/作者:王巍 (@onevcat)

总结

以上是内存溢出为你收集整理的Swift 条件编译全部内容,希望文章能够帮你解决Swift 条件编译所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1089263.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存