1、条件编译
2、宏定义define
1、条件编译
- Swift中没有宏定义的概念,因此我们不能使用#ifdef的方法来检查某个符号是否经过宏定义。但是为了控制编译流程和内容,Swift还是为我们提供了几种简单的机制来根据需求定制编译内容的。
首先是#if这套编译标记还是存在的,使用的语法也和原来没有区别
#if <condition>
#elseif <condition>
#else
#endif
但是这几个表达式里的condition并不是任意的。Swift内建了几种平台和架构的组合,来帮助我们为不同的平台编译不同的代码。
方法os(),可选参数OSX,iOS
方法arch(), 可选参数x86_64, arm, arm64, i386
- 对自定义的符号进行条件编译。为了使自定义的编译符号FREE_VERSION有效,我们需要在项目的编译选项中进行设置,在项目的Build Settings中,找到Swift Compiler-Custom Flags,并在其中的Other Swift Flags加上 -D FREE_VERSION就可以了。
2、宏定义define
- Swift中没有宏定义。
- Swift中将宏定义彻底从语言中拿掉了,并且Apple给了我们一些替代的建议:
I、使用合适作用范围的let或者get属性来替代原来的宏定义值,例如很多Darwin中的C的define值就是这么做的:var M_PI: Double { get }
II、对于宏定义的方法,类似的在同样作用域写成Swift方法。
III、随着#define的消失,像#ifdef这样通过宏定义是否存在来进行条件判断并决定某些代码是否参与编译的方式也消失了。但是我们仍然可以使用#if并配合编译的配置来完成条件编译。
网友评论