4.2 Swift语言中两种特殊的运算符
前边介绍过,Optional可选(值)类型是Swift语言的一大特点,Swift语言中的空合并运算符也是专门为Optional值类型所设计的。除了空合并运算符外,Swift语言中的区间运算符也十分强大易用,熟练使用这些运算符将极大地提高开发效率。
4.2.1 空合并运算符
可选值类型是Swift语言的一个独特之处,空合并运算符就是针对可选值类型而设计的运算符。首先来看一段示例代码:
上面的示例就是一个简单的if-else的选择结构,利用4.1.5小节介绍的条件运算符(三目运算符)可以将上面的代码简写如下:
var q:Int? = 8 var value:Int value = (q != nil) ? (q!) : 0
使用条件运算符改写后的代码简单很多,Swift语言中还提供了空合并运算符来更加简洁地处理这种Optional类型值的条件选择结构,空合并运算符由“??”表示,上面的代码可以改写成如下形式:
//空合并运算符 var q:Int? = 8 var value:Int value = q ?? 0
空合并运算符“??”是一个二元运算符,使用空合并运算符改写后的代码更加简洁。其需要两个操作数,第一个操作数必须为一个Optional值,如果此Optional值不为nil,则将其进行拆包操作,并作为空合并运算的运算结果。如果此Optional值为nil,则会将第二个操作数作为空合并操作运算的结果返回。使用空合并操作符来处理有关Optional值的选择逻辑将十分方便。
4.2.2 区间运算符
在C语言中,关于范围概念的描述常常会使用一个表达式来表示,例如:
//表示大于0小于10的范围 index>0 && index<10
在Objective-C语言中提供了NSRange这样一个结构体来描述范围,虽然直观了许多,但开发者在使用时需要构造NSRange实例,使用起来就略显烦琐。Swift中除了支持Range结构体来描述范围外,还提供了一个区间运算符来快捷直观地表示范围区间。示例如下:
//创建范围 >=0 且<=10 的闭区间 var range1 = 0...10 //创建范围>=0 且<10 的半开区间 var range2 = 0..<10
也可以通过“~=”运算符来检查某个数字是否包含于范围中,示例如下:
//8是否在range1中 print(range1 ~= 8) //输出 true
区间运算符常见于for-in循环结构中,开发者常常会使用区间运算符来定义循环次数,示例如下:
//a...b为闭区间写法 for index in 0...3 { print(index) } //a..<b为左闭右开区间 for index in 0..<3 { print(index) }
提示
在for-in循环结构中,如果in关键字后面是一个集合,则变量index会自动获取集合中的元素;如果in关键字后面是一个范围,则index获取到的是从左向右依次遍历到的范围索引数。