美文网首页
空合运算符(Nil Coalescing Operator)、区

空合运算符(Nil Coalescing Operator)、区

作者: VNSKing | 来源:发表于2015-05-20 20:22 被阅读89次

    空合运算符(Nil Coalescing Operator)

    空合运算符(a ?? b)将对可选类型a进行空判断,如果a包含一个值就进行解封,否则就返回一个默认值b.这个运算符有两个条件:

    • 表达式a必须是Optional类型
    • 默认值b的类型必须要和a存储值的类型保持一致

    空合并运算符是对以下代码的简短表达方法
    <pre><code>
    a != nil ? a! : b</code></pre>
    上述代码使用了三目运算符。当可选类型a的值不为空时,进行强制解封(a!)访问a中值,反之当a中值为空时,返回默认值b。无疑空合运算符(??)提供了一种更为优雅的方式去封装条件判断和解封两种行为,显得简洁以及更具可读性。

    <pre><code>
    注意: 如果a为非空值(non-nil),那么值b将不会被估值。这也就是所谓的短路求值。
    </code></pre>
    下文例子采用空合并运算符,实现了在默认颜色名和可选自定义颜色名之间抉择:
    <pre><code>let defaultColorName = "red"
    var userDefinedColorName:String? //默认值为nil
    var colorNameToUse = userDefinedColorName ?? defaultColorName
    //userDefinedColorName的值为空 ,所以colorNameToUse的值为red</code></pre>userDefinedColorName变量被定义为一个可选字符串类型,默认值为nil。由于userDefinedColorName是一个可选类型,我们可以使用空合运算符去判断其值。在上一个例子中,通过空合运算符为一个名为colorNameToUse的变量赋予一个字符串类型初始值。 由于userDefinedColorName值为空,因此表达式userDefinedColorName ?? defaultColorName返回默认值,即red。

    另一种情况,分配一个非空值(non-nil)给 userDefinedColorName,再次执行空合运算,运算结果为封包在userDefaultColorName中的值,而非默认值。

    <pre><code>userDefinedColorName = "green"
    colorNameToUse = userDefinedColorName ?? defaultColorName
    //userDefinedColorName非空,因此colorNameToUsede的值为绿色</code></pre>


    区间运算符

    Swift 提供了两个方便表达一个区间的值的运算符。

    闭区间运算符

    闭区间运算符(a...b)定义一个包含从a到b(包括a和b)的所有值的区间,b必须大于a。 ‌ 闭区间运算符在迭代一个区间的所有值时是非常有用的,如在for-in循环中:<pre><code>
    for index in 1...5 {
    println("\(index) * 5 = \(index * 5)")
    }
    // 1 * 5 = 5
    // 2 * 5 = 10
    // 3 * 5 = 15
    // 4 * 5 = 20
    // 5 * 5 = 25</code></pre>关于for-in,请看控制流
    半开区间运算符
    半开区间(a..<b)定义一个从a到b但不包括b的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。
    半开区间的实用性在于当你使用一个0始的列表(如数组)时,非常方便地从0数到列表的长度。
    <pre><code>
    let names = ["Anna", "Alex", "Brian", "Jack"]
    let count = names.count
    for i in 0..< count {
    println("第\(i + 1) 个人叫 \(names[i])")
    }
    // 第 1 个人叫 Anna
    // 第 2 个人叫 Alex
    // 第 3 个人叫 Brian
    // 第 4 个人叫 Jack</code></pre>数组有4个元素,但0..<count只数到3(最后一个元素的下标),因为它是半开区间。关于数组,请查阅数组

    相关文章

      网友评论

          本文标题:空合运算符(Nil Coalescing Operator)、区

          本文链接:https://www.haomeiwen.com/subject/mrblqttx.html