可選綁定 (optional binding)
使用可選綁定(optional binding)來判斷可選類型是否包含值檀蹋,如果包含就把值賦給一個臨時常量或者變量。可選綁定可以用在if和while語句中來對可選類型的值進行判斷并把值賦給一個常量或者變量。
像下面這樣在if語句中寫一個可選綁定:
<pre><code>if let constantName = someOptional {
statements
}</code></pre>
你可以像上面這樣使用可選綁定來重寫possibleNumber這個例子:
<pre><code>if let actualNumber = possibleNumber.toInt()
{
println("\(possibleNumber)has an integer value of\(actualNumber)")
}else
{
println("\(possibleNumber)could not be converted to an integer")
}
// 輸出 "123 has an integer value of 123"</code></pre>
這段代碼可以被理解為:
“如果possibleNumber.toInt返回的可選Int包含一個值,創(chuàng)建一個叫做actualNumber的新常量并將可選包含的值賦給它屏歹。”
如果轉(zhuǎn)換成功之碗,actualNumber常量可以在if語句的第一個分支中使用蝙眶。它已經(jīng)被可選類型包含的值初始化過,所以不需要再使用!后綴來獲取它的值褪那。在這個例子中幽纷,actualNumber只被用來輸出轉(zhuǎn)換結(jié)果。
你可以在可選綁定中使用常量和變量博敬。如果你想在if語句的第一個分支中操作actualNumber的值友浸,你可以改成if var actualNumber,這樣可選類型包含的值就會被賦給一個變量而非常量偏窝。
斷言 (assert)
可選類型可以讓你判斷值是否存在收恢,你可以在代碼中優(yōu)雅地處理值缺失的情況武学。然而,在某些情況下伦意,如果值缺失或者值并不滿足特定的條件火窒,你的代碼可能沒辦法繼續(xù)執(zhí)行。這時驮肉,你可以在你的代碼中觸發(fā)一個斷言(assertion)來結(jié)束代碼運行并通過調(diào)試來找到值缺失的原因沛鸵。
使用斷言進行調(diào)試
斷言會在運行時判斷一個邏輯條件是否為true。從字面意思來說缆八,斷言“斷言”一個條件是否為真。你可以使用斷言來保證在運行其他代碼之前疾捍,某些重要的條件已經(jīng)被滿足奈辰。如果條件判斷為true,代碼運行會繼續(xù)進行乱豆;如果條件判斷為false奖恰,代碼運行停止,你的應(yīng)用被終止宛裕。
如果你的代碼在調(diào)試環(huán)境下觸發(fā)了一個斷言瑟啃,比如你在 Xcode 中構(gòu)建并運行一個應(yīng)用,你可以清楚地看到不合法的狀態(tài)發(fā)生在哪里并檢查斷言被觸發(fā)時你的應(yīng)用的狀態(tài)揩尸。此外蛹屿,斷言允許你附加一條調(diào)試信息。
你可以使用全局assert函數(shù)來寫一個斷言岩榆。向assert函數(shù)傳入一個結(jié)果為true或者false的表達式以及一條信息错负,當表達式為false的時候這條信息會被顯示:
<pre><code>let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 因為 age < 0,所以斷言會觸發(fā)</code></pre>
在這個例子中勇边,只有age >= 0為true的時候犹撒,即age的值非負的時候,代碼運行才會繼續(xù)粒褒。如果age的值是負數(shù)识颊,就像代碼中那樣,age >= 0為false奕坟,斷言被觸發(fā)祥款,結(jié)束應(yīng)用。
斷言信息如果不需要执赡,可以被省略镰踏,就像這樣:
<pre><code>assert(age >= 0)</code></pre>
何時使用斷言
當條件可能為假時使用斷言,但是最終一定要保證條件為真沙合,這樣你的代碼才能繼續(xù)運行奠伪。斷言的適用情景:
- 整數(shù)類型的下標索引被傳入一個自定義下標腳本實現(xiàn)跌帐,但是下標索引值可能太小或者太大。
- 需要給函數(shù)傳入一個值绊率,但是非法的值可能導(dǎo)致函數(shù)不能正常執(zhí)行谨敛。
- 一個可選值現(xiàn)在是nil,但是后面的代碼運行需要一個非nil值滤否。
注意:
斷言可能導(dǎo)致你的應(yīng)用終止運行,所以你應(yīng)當仔細設(shè)計你的代碼來讓非法條件不會出現(xiàn)藐俺。然而炊甲,在你的應(yīng)用發(fā)布之前,有時候非法條件可能出現(xiàn)欲芹,這時使用斷言可以快速發(fā)現(xiàn)問題卿啡。