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