Swift 4从零到精通iOS开发
上QQ阅读APP看书,第一时间看更新

4.2 Swift语言中两种特殊的运算符

前边介绍过,Optional可选值类型是Swift语言的一大特点。Swift语言中的空合并运算符也是专门为Optional值类型所设计的。除了空合并运算符,Swift语言中的区间运算符也十分强大易用,熟练使用这些运算符将极大地提高开发效率。

4.2.1 空合并运算符

可选值类型(Optional)是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循环结构中,开发者常常会使用区间运算符来定义循环次数,示例如下:

提示

在for-in循环结构中,如果in关键字后面是一个集合,则变量index会自动获取集合中的元素;如果in关键字后面是一个范围,则index获取到的是从左向右依次遍历到的范围索引数。