博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift中使用构建配置来支持条件编译-b
阅读量:5988 次
发布时间:2019-06-20

本文共 1576 字,大约阅读时间需要 5 分钟。

在Objective-C中,我们经常使用预处理指令来帮助我们根据不同的平台执行不同的代码,以让我们的代码支持不同的平台,如:

1
2
3
4
5
6
7
8
9
#if TARGET_OS_IPHONE
 
    
#define MAS_VIEW UIView             
 
#elif TARGET_OS_MAC
 
    
#define MAS_VIEW NSView
 
#endif

在swift中,由于对C语言支持没有Objective-C来得那么友好(暂时不知swift 2到C的支持如何),所以我们无法像在Objective-C中那样自如而舒坦地使用预处理指令。

不过,swift也提供了自己的方式来支持条件编译,即使用build configurations(构建配置)。Build configurations已经包含了字面量true和false,以及两个平台测试函数os()和arch()。

其中os()用于测试系统类型,可传入的参数包含OSX, iOS, watchOS,所以上面的代码在swift可改成:

1
2
3
4
5
#if os(iOS)
    
typealias MAS_VIEW = UIView
#elseif os(OSX)
    
typealias MAS_VIEW = NSView
#endif

注:在WWDC 2014的“”一节(session 233)中,Elizabeth Reid将这种方式称为Shimming

遗憾的是,os()只能检测系统类型,而无法检测系统的版本,所以这些工作只能放在运行时去处理。关于如何检测系统的版本,Mattt Thompson老大在它的一文中给了我们答案。

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

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

1
2
3
4
5
#if DEBUG
    
let totalSeconds = totalMinutes
#else
    
let totalSeconds = totalMinutes * 60
#endif

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

1
2
3
4
5
#if build configuration
    
statements
#else
    
statements
#endif

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

1
2
3
4
5
6
7
#if build configuration && !build configuration
    
statements
#elseif build configuration
    
statements
#else
    
statements
#endif

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

参考

转载地址:http://ubnlx.baihongyu.com/

你可能感兴趣的文章
MongoDB分片技术[转]
查看>>
工作,别忘了生活(转)
查看>>
ARCGIS10.1 GeoDatabase深入理解:客户端连接与退出地理数据库时系统表的初始化
查看>>
清晨思语------管理谚语
查看>>
C plus plus 控制格式
查看>>
LINQPad 调试
查看>>
paip.性能跟踪profile原理与架构与本质-- python扫带java php
查看>>
RIAidea – Focus on Flash/Flex/AIR » About Me
查看>>
Easy steps to create a System Tray Application with C# z
查看>>
跨平台移动开发UI语言 -XAML
查看>>
解决maven项目 maven install失败 错误 Failed to execute goal org.apache.maven.plugins
查看>>
Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制--转载
查看>>
Ubuntu12.04 root权限界面登入
查看>>
[Android]解决ClickableSpan中点击后ListView中item的长按冲突的问题
查看>>
Yii的学习(4)--Active Record
查看>>
热方程的平均值公式
查看>>
CMSIS Example - Signal and Yield
查看>>
Android 签名详解
查看>>
编解码学习笔记(十):Ogg系列
查看>>
Dijkstra算法
查看>>