Swift可選綁定裹虫、斷言

可選綁定 (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值滤否。

請參考下標腳本函數(shù)脸狸。

注意:

斷言可能導(dǎo)致你的應(yīng)用終止運行,所以你應(yīng)當仔細設(shè)計你的代碼來讓非法條件不會出現(xiàn)藐俺。然而炊甲,在你的應(yīng)用發(fā)布之前,有時候非法條件可能出現(xiàn)欲芹,這時使用斷言可以快速發(fā)現(xiàn)問題卿啡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市菱父,隨后出現(xiàn)的幾起案子颈娜,更是在濱河造成了極大的恐慌,老刑警劉巖浙宜,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件官辽,死亡現(xiàn)場離奇詭異,居然都是意外死亡粟瞬,警方通過查閱死者的電腦和手機同仆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來裙品,“玉大人乓梨,你說我怎么就攤上這事∏逅郑” “怎么了扶镀?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焰轻。 經(jīng)常有香客問我臭觉,道長,這世上最難降的妖魔是什么辱志? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任蝠筑,我火速辦了婚禮,結(jié)果婚禮上揩懒,老公的妹妹穿的比我還像新娘什乙。我一直安慰自己,他們只是感情好已球,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布臣镣。 她就那樣靜靜地躺著辅愿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忆某。 梳的紋絲不亂的頭發(fā)上点待,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音弃舒,去河邊找鬼癞埠。 笑死,一個胖子當著我的面吹牛聋呢,可吹牛的內(nèi)容都是我干的苗踪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼削锰,長吁一口氣:“原來是場噩夢啊……” “哼徒探!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喂窟,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎央串,沒想到半個月后磨澡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡质和,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年稳摄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饲宿。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡厦酬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘫想,到底是詐尸還是另有隱情仗阅,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布国夜,位于F島的核電站减噪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏车吹。R本人自食惡果不足惜筹裕,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窄驹。 院中可真熱鬧朝卒,春花似錦、人聲如沸乐埠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至豪治,卻和暖如春洞拨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背负拟。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工烦衣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掩浙。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓花吟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厨姚。 傳聞我的和親對象是個殘疾皇子衅澈,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)谬墙,斷路器今布,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 關(guān)于 Swift 重要這個文檔所包含的準備信息, 是關(guān)于開發(fā)的 API 和技術(shù)的。這個信息可能會改變, 根據(jù)這個文...
    無灃閱讀 4,275評論 1 27
  • 常量和變量 常量和變量把一個名字(比如maximumNumberOfLoginAttempts或者welcomeM...
    窮人家的孩紙閱讀 2,402評論 0 3
  • 前言 Swift是一門新的適用于iOS拭抬,macOS部默,watchOS,tvOS開發(fā)的編程語言造虎。盡管如此傅蹂,Swift的...
    BoomLee閱讀 1,695評論 0 4
  • 本章將會介紹 什么是Swift基礎(chǔ)部分(The Basic) 什么是Swift Swift 是一種新的編程語言,用...
    寒橋閱讀 377評論 0 1