Swift的build configurations是如何支持条件编译的?

来源:互联网 发布:离线搜题软件 编辑:程序博客网 时间:2024/05/19 19:14


       在iOS开发中,大家习惯了用Objective-C,也清楚的知道其在各种不同情况下的编写方法,但对于近两年新出的swift语言的操作却略显生疏。

       就拿“让代码支持不同平台怎么实现”的案例来说,在Objective-C语言中,我们可能直接使用预处理指令就可实现,而在swift中却无法直接使用预处理命令,达到目的。不过作为一种完善的编程语言,swift也提供了自己的方式来支持条件编译,就是使用使用build configurations(构建配置)。

 

Build configurations包含了字面量true和false,以及两个平台测试函数os()和arch()。其中os()用于测试系统类型,可传入的参数包含OSX,iOS, watchOS。

但美中不足的是,os()只能检测系统类型,而无法检测系统的版本,所以这些工作只能放在运行时去处理。

而swift的另一个函数arch(),主要用于测试CPU的架构,可传入的值包括x86_64,arm, arm64, i386。需要注意的是arch(arm)对于ARM 64的设备来说,不会返回true。而arch(i386)在32位的iOS模拟器上编译时会返回true。

如果想自定义一些在调试期间使用的编译配置选项,则可以使用-D标识来告诉编译器,具体操作是在”BuildSetting”–>“Swift Compiler-Custom Flags”–>“Other Swift Flags”–>“Debug”中添加所需要的配置选项。如我们想添加常用的DEGUB选项,则可以在此加上”-D DEBUG”。这样我们就可以在代码中来执行一些debug与release时不同的操作,如

#if DEBUG

let totalSeconds = totalMinutes

#else

    let totalSeconds = totalMinutes * 60

#endif

一个简单的条件编译声明如下所示:

 

#if buildconfiguration

    statements

#else

    statements

#endif

 

当然,statements中可以包含0个或多个有效的swift的statements,其中可以包括表达式、语句、和控制流语句。另外,我们也可以使用&&和||操作符来组合多个build configuration,同时,可以使用!操作符来对buildconfiguration取反,如下所示:

 

#if buildconfiguration && !build configuration

    statements

#elseif buildconfiguration

    statements

#else

    statements

#endif

      需要注意的是,在swift中,条件编译语句必须在语法上是有效的,因为即使这些代码不会被编译,swift也会对其进行语法检查。

      以上就是Swift中使用构建配置来支持条件编译的一些基本操作,可能还有些复杂,期待Swift2能更简化,同时也希望本文对新手swift开发人员有所帮助。

 

参考:南峰子的技术博客

 

    

 

0 0
原创粉丝点击