空合運(yùn)算符(Nil Coalescing Operator)
空合運(yùn)算符(a ?? b)將對可選類型a進(jìn)行空判斷,如果a包含一個值就進(jìn)行解封桃焕,否則就返回一個默認(rèn)值b.這個運(yùn)算符有兩個條件:
- 表達(dá)式a必須是Optional類型
- 默認(rèn)值b的類型必須要和a存儲值的類型保持一致
空合并運(yùn)算符是對以下代碼的簡短表達(dá)方法
<pre><code>
a != nil ? a! : b</code></pre>
上述代碼使用了三目運(yùn)算符亏钩。當(dāng)可選類型a的值不為空時莲绰,進(jìn)行強(qiáng)制解封(a!)訪問a中值,反之當(dāng)a中值為空時姑丑,返回默認(rèn)值b蛤签。無疑空合運(yùn)算符(??)提供了一種更為優(yōu)雅的方式去封裝條件判斷和解封兩種行為,顯得簡潔以及更具可讀性栅哀。
<pre><code>
注意: 如果a為非空值(non-nil),那么值b將不會被估值震肮。這也就是所謂的短路求值。
</code></pre>
下文例子采用空合并運(yùn)算符留拾,實(shí)現(xiàn)了在默認(rèn)顏色名和可選自定義顏色名之間抉擇:
<pre><code>let defaultColorName = "red"
var userDefinedColorName:String? //默認(rèn)值為nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
//userDefinedColorName的值為空 戳晌,所以colorNameToUse的值為red
</code></pre>userDefinedColorName變量被定義為一個可選字符串類型,默認(rèn)值為nil痴柔。由于userDefinedColorName是一個可選類型沦偎,我們可以使用空合運(yùn)算符去判斷其值。在上一個例子中,通過空合運(yùn)算符為一個名為colorNameToUse的變量賦予一個字符串類型初始值豪嚎。 由于userDefinedColorName值為空鸿捧,因此表達(dá)式userDefinedColorName ?? defaultColorName返回默認(rèn)值,即red疙渣。
另一種情況匙奴,分配一個非空值(non-nil)給 userDefinedColorName,再次執(zhí)行空合運(yùn)算妄荔,運(yùn)算結(jié)果為封包在userDefaultColorName中的值泼菌,而非默認(rèn)值。
<pre><code>userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName
//userDefinedColorName非空啦租,因此colorNameToUsede的值為綠色</code></pre>
區(qū)間運(yùn)算符
Swift 提供了兩個方便表達(dá)一個區(qū)間的值的運(yùn)算符哗伯。
閉區(qū)間運(yùn)算符
閉區(qū)間運(yùn)算符(a...b)定義一個包含從a到b(包括a和b)的所有值的區(qū)間,b必須大于a篷角。 ? 閉區(qū)間運(yùn)算符在迭代一個區(qū)間的所有值時是非常有用的焊刹,如在for-in循環(huán)中:<pre><code>
for index in 1...5 {
println("\(index) * 5 = \(index * 5)")
}
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20
// 5 * 5 = 25</code></pre>關(guān)于for-in,請看控制流恳蹲。
半開區(qū)間運(yùn)算符
半開區(qū)間(a..<b)定義一個從a到b但不包括b的區(qū)間虐块。 之所以稱為半開區(qū)間,是因?yàn)樵搮^(qū)間包含第一個值而不包括最后的值嘉蕾。
半開區(qū)間的實(shí)用性在于當(dāng)你使用一個0始的列表(如數(shù)組)時贺奠,非常方便地從0數(shù)到列表的長度。
<pre><code>
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..< count {
println("第\(i + 1) 個人叫 \(names[i])")
}
// 第 1 個人叫 Anna
// 第 2 個人叫 Alex
// 第 3 個人叫 Brian
// 第 4 個人叫 Jack</code></pre>數(shù)組有4個元素错忱,但0..<count只數(shù)到3(最后一個元素的下標(biāo))儡率,因?yàn)樗前腴_區(qū)間。關(guān)于數(shù)組以清,請查閱數(shù)組儿普。