swift 之空合運算子(Nil Coalescing Operator)
阿新 • • 發佈:2018-11-28
空合運算子(a ?? b
)將對可選型別a
進行空判斷,如果a
包含一個值就進行解封,否則就返回一個預設值b
.這個運算子有兩個條件:
1.表示式a
必須是Optional型別
2.預設值b
的型別必須要和a
儲存值的型別保持一致
空合併運算子是對以下程式碼的簡短表達方法:
a != nil ? a! : b
上述程式碼使用了三目運算子。當可選型別a
的值不為空時,進行強制解封(a!
)訪問a
中值,反之當a
中值為空時,返回預設值b。無疑空合運算子(??
)提供了一種更為優雅的方式去封裝條件判斷和解封兩種行為,顯得簡潔以及更具可讀性。
注意: 如果a
為非空值(non-nil
),那麼值b
將不會被估值。這也就是所謂的短路求值。
下文例子採用空合併運算子,實現了在預設顏色名和可選自定義顏色名之間抉擇:
let defaultColorName = "red"
var userDefinedColorName:String? //預設值為nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
//userDefinedColorName的值為空 ,所以colorNameToUse的值為`red`
userDefinedColorName
變數被定義為一個可選字串型別,預設值為nil。由於userDefinedColorName
是一個可選型別,我們可以使用空合運算子去判斷其值。在上一個例子中,通過空合運算子為一個名為colorNameToUse
userDefinedColorName
值為空,因此表示式userDefinedColorName ?? defaultColorName
返回預設值,即red
。
另一種情況,分配一個非空值(non-nil
)給 userDefinedColorName
,再次執行空合運算,運算結果為封包在userDefaultColorName
中的值,而非預設值。
userDefinedColorName = "green" colorNameToUse = userDefinedColorName ?? defaultColorName //userDefinedColorName非空,因此colorNameToUsede的值為綠色