“空合運(yùn)算符(a ?? b)將對(duì)可選類型 a 進(jìn)行空判斷,如果 a 包含一個(gè)值就進(jìn)行解封灌灾,否則就返回一個(gè)默認(rèn)值 b遇骑。表達(dá)式 a 必須是 Optional 類型恒削。默認(rèn)值 b 的類型必須要和 a 存儲(chǔ)值的類型保持一致棉浸。
空合運(yùn)算符是對(duì)以下代碼的簡(jiǎn)短表達(dá)方法:
a != nil ? a! : b
上述代碼使用了三目運(yùn)算符怀薛。當(dāng)可選類型 a 的值不為空時(shí),進(jìn)行強(qiáng)制解封(a!)迷郑,訪問(wèn) a 中的值枝恋;反之返回默認(rèn)值 b。無(wú)疑空合運(yùn)算符(??)提供了一種更為優(yōu)雅的方式去封裝條件判斷和解封兩種行為三热,顯得簡(jiǎn)潔以及更具可讀性。
注意: 如果 a 為非空值(non-nil)三幻,那么值 b 將不會(huì)被計(jì)算就漾。這也就是所謂的[…]”
“var userDefinedColorName: String?? //默認(rèn)值為 nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName 的值為空,所以 colorNameToUse 的值為 "red"
userDefinedColorName 變量被定義為一個(gè)可選的 String 類型念搬,默認(rèn)值為 nil抑堡。由于 userDefinedColorName 是一個(gè)可選類型,我們可以使用空合運(yùn)算符去判斷其值朗徊。在上一個(gè)例子中首妖,通過(guò)空合運(yùn)算符為一個(gè)名為 colorNameToUse 的變量賦予一個(gè)字符串類型初始值。 由于 userDefinedColorName 值為空爷恳,因此表達(dá)式 userDefinedColorName ?? defaultColorName 返回 defaultColorName 的值有缆,即 red。
另一種情況温亲,分配一個(gè)非空值(non-nil)給 userDefinedColorName棚壁,再次執(zhí)行空合運(yùn)算,運(yùn)算結(jié)果為封包在 userDefaultColorName 中的值栈虚,而非默認(rèn)值袖外。
userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName 非空,因此 colorNameToUse 的值為 "green”