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开发人员有所帮助。
参考:南峰子的技术博客
- Swift的build configurations是如何支持条件编译的?
- Swift1.0的Build Configurations如何使用?
- 如何以Swift版本号作为条件编译的判断依据
- MySQL是如何优化WHERE条件的
- can如何在kernel里面修改,保证编译的kernel是支持can驱动的
- Jenkins build失败的条件
- android是如何编译的
- eclipse 里的 Run Configurations...
- sql-build,一个支持条件控制的go语言sql拼接库
- Swift 条件编译
- Swift 常用条件编译
- Linux 是如何支持SMP的
- C是如何支持OC运行的
- 简单的条件编译
- 条件编译的用途
- 条件编译的认识
- 条件编译的用法
- C++的条件编译
- 控制器添加控制器的view的方法
- Arrays.binarySearch();
- unity5是否是移动端游戏开发王者?
- C++构造函数,复制构造函数,赋值操作符
- 人手一份核武器 - Hacking Team 泄露(开源)资料导览手册
- Swift的build configurations是如何支持条件编译的?
- 技术性博客收集
- 简易局域网视频服务器
- jsp和servlet基础1
- web程序统计在线人数的实现方式!
- 如何辨别sql文件是用于sqlserver的还是mysql的
- 数据结构基础 之 二叉堆 概念篇
- Nano编辑
- 国际化的jstl标签