1. 程式人生 > >swift 之空合運算子(Nil Coalescing Operator)

swift 之空合運算子(Nil Coalescing Operator)

空合運算子(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的值為綠色