Swift語(yǔ)法基礎(chǔ)之?dāng)嘌?/h1>

上篇文章談到了可選猛拴,可選可以讓你判斷值是否存在,你可以在代碼中優(yōu)雅地處理值缺失的情況蚀狰。然而愉昆,在某些情況下,如果值缺失或者值并不滿足特定的條件麻蹋,你的代碼可能并不需要繼續(xù)執(zhí)行跛溉。這 時(shí),你可以在你的代碼中觸發(fā)一個(gè)斷言(assertion)來(lái)結(jié)束代碼運(yùn)行并通過(guò)調(diào)試來(lái)找到值 缺失的原因扮授。

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

斷言會(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)寫一個(gè)斷言质蕉。向 assert 函數(shù)傳入一個(gè)結(jié)果為 true 或者 false 的表達(dá)式以及一條信息,當(dāng)表達(dá)式為 false 的時(shí)候這條信息會(huì)被顯示:

let age = -3
assert(age >= 0, "A person is 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)

二:何時(shí)使用斷言

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

整數(shù)的附屬腳本索引被傳入一個(gè)自定義附屬腳本實(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ì)你的代碼來(lái)讓非法條件不會(huì)出現(xiàn)。然而缠俺,在你的應(yīng)用發(fā)布之前显晶,有時(shí)候非法條件可能出現(xiàn),這時(shí)使用斷言可以快速發(fā)現(xiàn)問(wèn)題壹士。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末磷雇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子躏救,更是在濱河造成了極大的恐慌唯笙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盒使,死亡現(xiàn)場(chǎng)離奇詭異崩掘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)少办,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門苞慢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人英妓,你說(shuō)我怎么就攤上這事挽放。” “怎么了蔓纠?”我有些...
    開(kāi)封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵辑畦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我腿倚,道長(zhǎng)纯出,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮潦刃,結(jié)果婚禮上侮措,老公的妹妹穿的比我還像新娘。我一直安慰自己乖杠,他們只是感情好分扎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著胧洒,像睡著了一般畏吓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卫漫,一...
    開(kāi)封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天菲饼,我揣著相機(jī)與錄音,去河邊找鬼列赎。 笑死宏悦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的包吝。 我是一名探鬼主播饼煞,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诗越!你這毒婦竟也來(lái)了砖瞧?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嚷狞,失蹤者是張志新(化名)和其女友劉穎块促,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體床未,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竭翠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薇搁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逃片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖只酥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呀狼,我是刑警寧澤裂允,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站哥艇,受9級(jí)特大地震影響绝编,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一十饥、第九天 我趴在偏房一處隱蔽的房頂上張望窟勃。 院中可真熱鬧,春花似錦逗堵、人聲如沸秉氧。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)汁咏。三九已至,卻和暖如春作媚,著一層夾襖步出監(jiān)牢的瞬間攘滩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工纸泡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漂问,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓女揭,卻偏偏與公主長(zhǎng)得像蚤假,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子田绑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容