swift基礎(chǔ)—斷言(Assertion)

可選類型可以讓你判斷值是否存在,你可以在代碼中優(yōu)雅地處理值缺失的情況。然而,在某些情況下,如果值缺失或者值并不滿足特定的條件,你的代碼可能沒辦法繼續(xù)執(zhí)行。這時(shí),你可以在你的代碼中觸發(fā)一個(gè)* 斷言(assertion) *來結(jié)束代碼運(yùn)行并通過調(diào)試來找到值缺失的原因。

使用斷言進(jìn)行調(diào)試####

斷言會(huì)在運(yùn)行時(shí)判斷一個(gè)邏輯條件是否為* true *。從字面意思來說,斷言“斷言”一個(gè)條件是否為真。你可以使用斷言來保證在運(yùn)行其他代碼之前,某些重要的條件已經(jīng)被滿足。如果條件判斷為 true ,代碼運(yùn)行會(huì)繼續(xù)進(jìn)行;如果條件判斷為 false ,代碼執(zhí)行結(jié)束,你的應(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(::file:line:) 函數(shù)來寫一個(gè)斷言。向這個(gè)函數(shù)傳入一個(gè)結(jié)果為 true 或者 false 的表達(dá)式以及一條信息,當(dāng)表達(dá)式的結(jié)果為 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 >= 0true 的時(shí)候,即 age 的值非負(fù)的時(shí)候,代碼才會(huì)繼續(xù)執(zhí)行。如果 age 的值是負(fù)數(shù),就像代碼中那樣, age >= 0false ,斷言被觸發(fā),終止應(yīng)用。

如果不需要斷言信息,可以省略,就像這樣:

 assert(age >= 0)

注意:
當(dāng)代碼使用優(yōu)化編譯的時(shí)候,斷言將會(huì)被禁用,例如在 Xcode 中,使用默認(rèn)的 target Release 配置選項(xiàng)來 build 時(shí),斷言會(huì)被禁用。

何時(shí)使用斷言####

當(dāng)條件可能為假時(shí)使用斷言,但是最終一定要保證條件為真,這樣你的代碼才能繼續(xù)運(yùn)行。斷言的適用情景:

  • 整數(shù)類型的下標(biāo)索引被傳入一個(gè)自定義下標(biāo)實(shí)現(xiàn),但是下標(biāo)索引值可能太小或者太大。
  • 需要給函數(shù)傳入一個(gè)值,但是非法的值可能導(dǎo)致函數(shù)不能正常執(zhí)行。
  • 一個(gè)可選值現(xiàn)在是* nil* ,但是后面的代碼運(yùn)行需要一個(gè)非 nil 值。

注意:
斷言可能導(dǎo)致你的應(yīng)用終止運(yùn)行,所以你應(yīng)當(dāng)仔細(xì)設(shè)計(jì)你的代碼來讓非法條件不會(huì)出現(xiàn)。然而,在你的應(yīng)用發(fā)布之前,有時(shí)候非法條件可能出現(xiàn),這時(shí)使用斷言可以快速發(fā)現(xiàn)問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,662評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,282評論 6 342
  • 關(guān)于 Swift 重要這個(gè)文檔所包含的準(zhǔn)備信息, 是關(guān)于開發(fā)的 API 和技術(shù)的。這個(gè)信息可能會(huì)改變, 根據(jù)這個(gè)文...
    無灃閱讀 4,625評論 1 27
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,234評論 25 708
  • 項(xiàng)目中遇到一個(gè)問題: 項(xiàng)目背景:用UIViewControllerInteractiveTransitioning...
    有血有肉的程序員閱讀 721評論 0 1

友情鏈接更多精彩內(nèi)容