筆記摘要(十二)--Swift3.0之錯誤處理and類型轉(zhuǎn)換

錯誤處理

  • 表示并拋出錯誤

    • 在Swift中,錯誤用符合Error協(xié)議的類型的值來表示抛丽;這個空協(xié)議表明該類型可以用于錯誤處理亿鲜。

    • Swift的枚舉類型尤為適合構建一組相關的錯誤狀態(tài)蒿柳,枚舉的關聯(lián)值還可以提供錯誤狀態(tài)的額外信息垒探。

    • 拋出錯誤使用 throw關鍵字圾叼。

      enum VendingMachineError: Error{ 
        case  InvalidSelection    
        case InsufficientFunds(coinsNeeded: Int)    
        case OutOfStock
      }
      throwVendingMachineError.InsufficientFunds(coinsNeeded: 5)
      
  • 處理錯誤

    • throwing 函數(shù)傳遞錯誤

為了表示一個函數(shù)夷蚊、方法或構造器可以拋出錯誤,在函數(shù)聲明的參數(shù)列表之后加上throws關鍵字筋现。一個標有throws關鍵字的函數(shù)被稱作throwing函數(shù)矾飞。如果這個函數(shù)指明了返回值類型凰慈,throws關鍵詞需要寫在箭頭(->)的前面微谓。

一個throwing函數(shù)可以在其內(nèi)部拋出錯誤豺型,并將錯誤傳遞到函數(shù)被調(diào)用時的作用域姻氨。

任何在某個非throwing函數(shù)內(nèi)部拋出的錯誤只能在函數(shù)內(nèi)部處理肴焊。

  • 用do-catch處理錯誤

    可以使用一個do-catch語句運行一段閉包代碼來處理錯誤娶眷。如果在do子句中的代碼拋出了一個錯誤届宠,這個錯誤會與catch子句做匹配豌注,從而決定哪條子句能處理它每聪。

  • 將錯誤轉(zhuǎn)換成可選值

可以使用try?通過將錯誤轉(zhuǎn)換成一個可選值來處理錯誤齿风。如果在評估try?表示式時一個錯誤被拋出聂宾,那么表達式的值就是nil系谐。

  • 禁用錯誤傳遞
    當某個throwing函數(shù)實際上在運行時是不會拋出錯誤時纪他,可以在表達式前面寫try!來禁用錯誤傳遞茶袒。這會把調(diào)用包裝在一個不會有錯誤拋出的運行時斷言中薪寓。如果真的拋出了錯誤向叉,你會得到一個運行時錯誤母谎。

  • 指定清理操作

    • 可以使用defer語句在即將離開當前代碼塊時執(zhí)行一系列語句奇唤。比如匹摇,可以用來確保文件描述符得以關閉冗栗,以及手動分配的內(nèi)存得以釋放。

    • defer語句將代碼的執(zhí)行延遲到當前的作用域退出之前。

    • 即使沒有涉及到錯誤處理棉钧,你也可以使用defer語句宪卿。

類型轉(zhuǎn)換

類型轉(zhuǎn)換在swift中使用isas操作符實現(xiàn)。也可以用來檢查一個類型是否實現(xiàn)了某個協(xié)議休溶。

  • 檢查類型

    用類型檢查符is來檢查一個實例是否屬于特定子類型扰她。若實例屬于那個子類型孽尽,返回true,否則返回false杉女。

  • 向下轉(zhuǎn)型

    當類型的一個常量或變量可能在幕后實際上屬于一個子類宠纯。當確定是這種情況時婆瓜,可以嘗試向下轉(zhuǎn)到它的子類型,用類型轉(zhuǎn)換操作符as?as!猴蹂。

    轉(zhuǎn)換沒有真的改變實例或它的值磅轻。根本的實例保持不變:只是簡單的把它作為它被轉(zhuǎn)換成的類型來使用谆膳。

  • Any和AnyObject的類型轉(zhuǎn)換

在你的代碼里使用你期望的明確類型總是更好的漱病。

AnyObject可以表示任何類類型的實例。
Any可以表示任何類型注盈,包括函數(shù)類型。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浪慌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌损话,老刑警劉巖槽唾,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丧枪,死亡現(xiàn)場離奇詭異,居然都是意外死亡庞萍,警方通過查閱死者的電腦和手機拧烦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钝计,“玉大人恋博,你說我怎么就攤上這事齐佳。” “怎么了债沮?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵炼吴,是天一觀的道長。 經(jīng)常有香客問我秦士,道長缺厉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任隧土,我火速辦了婚禮提针,結果婚禮上,老公的妹妹穿的比我還像新娘曹傀。我一直安慰自己辐脖,他們只是感情好,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布皆愉。 她就那樣靜靜地躺著嗜价,像睡著了一般。 火紅的嫁衣襯著肌膚如雪幕庐。 梳的紋絲不亂的頭發(fā)上久锥,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音异剥,去河邊找鬼瑟由。 笑死,一個胖子當著我的面吹牛冤寿,可吹牛的內(nèi)容都是我干的歹苦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼督怜,長吁一口氣:“原來是場噩夢啊……” “哼殴瘦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起号杠,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蚪腋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后姨蟋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辣吃,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年芬探,在試婚紗的時候發(fā)現(xiàn)自己被綠了神得。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡偷仿,死狀恐怖哩簿,靈堂內(nèi)的尸體忽然破棺而出宵蕉,到底是詐尸還是另有隱情,我是刑警寧澤节榜,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布羡玛,位于F島的核電站,受9級特大地震影響宗苍,放射性物質(zhì)發(fā)生泄漏稼稿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一讳窟、第九天 我趴在偏房一處隱蔽的房頂上張望让歼。 院中可真熱鬧,春花似錦丽啡、人聲如沸谋右。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽改执。三九已至,卻和暖如春坑雅,著一層夾襖步出監(jiān)牢的瞬間辈挂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工裹粤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呢岗,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓蛹尝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親悉尾。 傳聞我的和親對象是個殘疾皇子突那,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

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