1. 程式人生 > >Swift三元運算子和Nil Coalescing運算子

Swift三元運算子和Nil Coalescing運算子

  

三元運算子

     三元運算的特殊在於它是有三個運算元的運算子,它的原型是問題?答案1:答案2。

    三元運算子簡潔地表達根據問題成立與否作出二選一的操作。如果問題成立,返回答案1的結果; 如果不成立,返回答案2的結果。

下面我們來看一個三元運算子的示例計算表格行高的例子。如果有表頭,那行高應比內容高度要高出50畫素; 如果沒有表頭,只需高出20畫素。

  1 |  let contentHeight = 40

  2 |  let hasHeader = true

  3 |  let rowHeight = contentHeight + (hasHeader ? 50 : 20)

輸出結果: rowHeight 現在是 90

三元運算提供有效率且便捷的方式來表達二選一的選擇。需要注意的事,過度使用三元運算就會由簡潔的程式碼變成難懂的程式碼。我們應避免在一個組合語句使用多個三元運算子。

Nil Coalescing運算子

   Nil Coalescing運算子的原型是答案1??答案2。我們可以用一句程式碼表示Nil Coalescing運算子:

  1 |  let c = a ?? b

使用該運算子必須滿足以下兩個條件:

1. a必須是可選型別的。

2.b的型別必須和a解包後的值型別一致的

   只有符合這兩個條件後,第1行程式碼表示的就是c的值是a或b中的一個,當a解包後的值不為nil時,就將a的值賦值給c。當a解包後的值為nil時,就將b的值賦值給c。

我們可以用三元運算子來更清晰的理解Nil Coalescing運算子。它可以表示為

  1 |  let c = a != nil ? a ! : b

從上面的程式碼我們很容易理解,當a的值不等於nil時,將a解包後的值賦值給c,否則將b的值賦值給c。

  1 |  var  a:String?

  2 |  let  b = "str"

  3 |  var c = a ?? b

  4 |  print(c)

輸出結果:str。

上述程式碼中,a的值為nill,所以就會把b的值賦值給c。最後c的值就是str。