美文网首页
条件编译

条件编译

作者: wangwenju | 来源:发表于2017-07-04 22:29 被阅读0次

在 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
    typealias Color = UIColor
#endif

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

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

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

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

相关文章

  • 条件编译

    与 if 语句区别: 条件编译在编译之前执行,符合条件的才会被编译执行 if 语句在编译的时候都会被编译,但是只要...

  • 条件编译

    在 C 系语言中,可以使用 #if 或者 #ifdef 之类的编译条件分支来控制哪些代码需要编译,而哪些代码不需要...

  • 条件编译

    // C 系语言中,可以是用 #if 或者 #ifdef 之类的编译条件分支来控制那些代码需要编。/*#if#el...

  • 条件编译

    实际中遇到了问题, 查询后发现此处使用条件编译 即可通过定义USE_HORIZONTAL 的值来执行条件选择 条件...

  • 条件编译

    条件编译和选则结构if的共同点 都可以对给定的条件进行判断, 添加满足或者不满足都可以执行特定的代码条件编译和选则...

  • 编译和预处理指令

    1.预处理指令分类: 2.条件编译目的:防止文件重复包含和编译 条件编译当然也可以用条件语句来实现。 但是用条件语...

  • 22_条件编译使用分析

    关键词:条件编译的本质、#include的本质、 条件编译的意义 0 基本概念: 1) 条件编译的行为类似于C语言...

  • V语言学习笔记-25条件编译

    条件编译 目前主要针对不同平台,实现条件编译 按照作者的说法,为了保持V的简单,不会加入预处理,但是支持条件编译 ...

  • 嵌入式day13

    条件编译 编译器根据条件真假决定是否编译相关的代码 常见的条件编译有两种方法 根据宏是否定义 根据宏的值 结构体 ...

  • [每天进步一点点~] #ifdef 和 #ifend

    条件编译 条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。写法:以 #...

网友评论

      本文标题:条件编译

      本文链接:https://www.haomeiwen.com/subject/seffhxtx.html