Swift从入门到精通 (移动开发丛书)
上QQ阅读APP看书,第一时间看更新

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

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

4.2.1 空合并运算符

可选值类型(Optional)是Swift语言的一个独特之处,空合并运算符就是针对可选类型而设计的运算符。首先来看一段示例代码:

        var q:Int? = 8
        var value:Int
        if q ! = nil {
            value = q!
        }else{
            value = 0
        }

上面的示例就是一个简单的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获取到的是从左向右依次遍历到的范围索引数。