可選類型可以讓你判斷值是否存在,你可以在代碼中優(yōu)雅地處理值缺失的情況。然而,在某些情況下,如果值缺失或者值并不滿足特定的條件,你的代碼可能并不需要繼續(xù)執(zhí)行。這時,你可以在你的代碼中觸發(fā)一個斷言(assertion)來結束代碼運行并通過調試來找到值缺失的原因。
斷言會在運行時判斷一個邏輯條件是否為true
。從字面意思來說,斷言“斷言”一個條件是否為真。你可以使用斷言來保證在運行其他代碼之前,某些重要的條件已經被滿足。如果條件判斷為true
,代碼運行會繼續(xù)進行;如果條件判斷為false
,代碼運行停止,你的應用被終止。
如果你的代碼在調試環(huán)境下觸發(fā)了一個斷言,比如你在 Xcode 中構建并運行一個應用,你可以清楚地看到不合法的狀態(tài)發(fā)生在哪里并檢查斷言被觸發(fā)時你的應用的狀態(tài)。此外,斷言允許你附加一條調試信息。
你可以使用全局assert
函數(shù)來寫一個斷言。向assert
函數(shù)傳入一個結果為true
或者false
的表達式以及一條信息,當表達式為false
的時候這條信息會被顯示:
let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 因為 age < 0,所以斷言會觸發(fā)
在這個例子中,只有age >= 0
為true
的時候代碼運行才會繼續(xù),也就是說,當age
的值非負的時候。如果age
的值是負數(shù),就像代碼中那樣,age >= 0
為false
,斷言被觸發(fā),結束應用。
斷言信息不能使用字符串插值。斷言信息可以省略,就像這樣:
assert(age >= 0)
當條件可能為假時使用斷言,但是最終一定要保證條件為真,這樣你的代碼才能繼續(xù)運行。斷言的適用情景:
nil
,但是后面的代碼運行需要一個非nil
值。注意:
斷言可能導致你的應用終止運行,所以你應當仔細設計你的代碼來讓非法條件不會出現(xiàn)。然而,在你的應用發(fā)布之前,有時候非法條件可能出現(xiàn),這時使用斷言可以快速發(fā)現(xiàn)問題。