Swift中使用构建配置来支持条件编译-b

在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的“Sharing code between iOS and OS X”一节(session 233)中,Elizabeth Reid将这种方式称为Shimming

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

我们再来看看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也会对其进行语法检查。

参考

时间: 2024-09-30 16:21:34

Swift中使用构建配置来支持条件编译-b的相关文章

Swift中HomeKist发现和管理支持HomeKit的配件(五)

如果我们想打开灯,或者别的控件,首先需要找到改控件,根据该控件找到该控件的服务,根据服务找到该控件的特征,根据特征的描述打开或者关闭该灯,这里只写到特征,控制特征参考下一篇 import UIKit import HomeKit class ViewController: UIViewController,HMHomeManagerDelegate,HMAccessoryBrowserDelegate{ @IBOutlet weak var tableView: UITableView? var

在 Swift 中实现 NS_OPTIONS

从Xcode 4.5以后,我们在Objective-C中使用NS_ENUM和NS_OPTIONS来定义一个枚举,以替代C语言枚举的定义方式.其中NS_ENUM用于定义普通的枚举,NS_OPTIONS用于定义选项类型的枚举. 而到了Swift中,枚举增加了更多的特性.它可以包含原始类型(不再局限于整型)以及相关值.正是由于这些原因,枚举在Swift中得到了更广泛的应用.在Foundation中,Objective-C中的NS_ENUM类型的枚举,都会自动转换成Swift中enum,并且更加精炼.以

NS_OPTIONS在swift中怎么实现?

今天在一个ios培训网站上看到一篇博客,讲的是在NS_OPTIONS在Swift中的实现,写得还算比较深刻全面,小编对其进行整理后,分享出来,希望对大家在iOS应用开发上有所帮助吧. 在iOS开发中,我们常常需要定义一个枚举,以替代C语言枚举的定义方式,常用的方法就是在Objective-C中使用NS_ENUM和NS_OPTIONS.其中,NS_ENUM用于定义普通的枚举,NS_OPTIONS用于定义选项类型的枚举. 不同于Objective-C语言,Swift中的枚举增加了更多特性,它可以包含

iOS开发——开发总结Swift篇&Swift中的条件编译

Swift中的条件编译 在Objective-C中,我们经常使用预处理指令来帮助我们根据不同的平台执行不同的代码,以让我们的代码支持不同的平台,如: 1 #if TARGET_OS_IPHONE 2 3 #define MAS_VIEW UIView 4 5 #elif TARGET_OS_MAC 6 7 #define MAS_VIEW NSView 8 9 #endif 在swift中,由于对C语言支持没有Objective-C来得那么友好(暂时不知swift 2到C的支持如何),所以我们无

使用Koloda View在Swift中构建类似Tinder(国内的探探社交应用)的卡片

在过去几年中,随着社交网络应用程序的普及,约会应用程序也迅速出现.其中一个最突出的应用是Tinder.它不仅是一个很棒的约会应用程序,而且还在视图动画或过渡方面创建了新的iOS趋势,例如Tinder Card Swipe或Tinder UI 在这个iOS教程中,我们将学习如何在Swift中构建Tinder Swipe Cards,以便您可以将此功能包含在iOS应用程序中.目前有一些图库支持这种类型的可滑动卡片,其中一个是KolodaView.在本教程中,我们将向您展示如何使用代码示例在Swift

apache中配置php支持模块模式、cgi模式和fastcgi模式

apache中配置php支持模块模式.cgi模式和fastcgi模式 首先安装apache.MySQL和PHP,依次顺序安装. 1.apache.mysql的安装比较简单,略过 2. php的安装,我安装的是php5.3.6内置了php-fpm,所以不需要再单独下补丁了. ./configure –prefix=/usr/local/php5 /--with-mysql=/usr/local/mysql /--enable-fpm--with-apxs2=/usr/local/apache/bi

<转>在Swift中构建assert()

__FILE__ 和 __LINE__这两个神奇的宏定义是C语言中偶尔有用的特性.他们被构建在预处理程序中,并在C语言语法分析程序运行前被展开.尽管Swift没有预处理程序,它却提供了名称相似的类似功能,但隐藏着极其不同的实现方式. 内建标识符 就像在the Swift programming guide中描述的那样,Swift有很多内建标识符,包括__FILE__, __LINE__, __COLUMN__, 和 __FUNCTION__.这些表达式可以在任何地方使用,并被语法分析器在源码对应

Dubbo源码分析(三):自定义Schema--基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)

在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙.一般的做法会用原生态的方式去解析定义好的xml文件,然后转化为配置对象,这种方式当然可以解决所有问题,但实现起来比较繁琐,特别是是在配置非常复杂的时候,解析工作是一个不得不考虑的负担.Spring提供了可扩展Schema的支持,这是一个不错的折中方案,完成一个自定义配置一般需要以下步骤: 设计配置属性和JavaBean 编写XSD文件 编

Swift中使用SQLite的配置方法

Swift 中使用 SQLite 1.准备工作 添加 libsqlite3.dylib 创建 SQLite-Bridge.h SQLite3 框架是一套 C 语言的框架,因此需要添加桥接文件 选择 项目-TARGETS-Build Settings,搜索 Bridg 在 Objective-C Bridging Header 中输入 项目名/SQLite-Bridge.h 如果之前设置过桥接文件,可以直接使用 导入SQLite3.thd头文件 导入成功