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。