swift丟擲異常 Swift 2 0 異常處理

2021-10-17 01:14:54 字數 1314 閱讀 1351

wwdc 2015 宣布了新的 swift 2.0. 這次重大更新給 swift 提供了新的異常處理方法。這篇文章會主要圍繞這個方面進行討論。

如何建造異常型別?

在 ios 開發當中,我們會面對很多異常處理。在 cocoa touch 中我們使用 nserror 來進行異常處理。在新的 swift 2.0 中,我們可以使用新的 errortype protocol。

在 swift 中, enum 是最好的方法建立屬於你自己的異常型別,你只要在你的 enum 中確認新的 errortype。enum myerror: errortype  catch  catch myerror.notexist  catch myerror.outofrange {

// deal with not exist

這裡值得提一下在 swift 2.0中乙個跟異常處理沒有關係的改進

swift 2.0 中沒有了 do-while迴圈,取而代之的是 repeat-while。蘋果說這個改動是為了增強**的可讀性。但是我更覺得是為了讓我們更舒服的使用 do-catch

不處理異常

如果我不想處理異常怎麼辦,或者說,我非常確定某個方法或者函式雖然宣告會丟擲異常,但是我自己知道我在使用時候是絕對不會丟擲任何異常的。這種情況下 我們可以使用 try!try! functionthrowerrornil()

當然,如果你使用 try!,而你的方法或者函式丟擲了異常,那麼你會得到乙個執行中異常 (runtime error) 所以我們開發者需要慎用哦。

defer

文章結束前我們再討論下 defer

在你的**塊就要結束前。如果你使用了 defer。 在其之中的**就會執行。等於說,給了你最後的機會來進行一些處理。如果你熟悉 bdd 或者 tdd, 那麼你可以參考他們中的 aferall 機制func myfunction() throws {

defer {

print("all done, clean up here")

guard let item = item else {

// need throws the error out

throw myerror.notexist

guard item.count > maxnumber else {

// need throws the error out

throw myerror.outofrange

// do something with item

總結使用 errortype 的幫助建立你的異常型別

使用 throws 來宣告異常,用 throw 來丟擲異常

使用 do-catch 機制來獲取和處理異常

Swift2學習 Swift概覽2 控制流

控制流 使用if和switch構建條件語句,使用for in,for,while和repeat while構建迴圈語句。括號括主條件語句或迴圈變數是可選的。但是擴主主語句是必須的。for score in individualscores else if score 50 else print te...

從零學習Swift 2

定義let 定義常量,一經賦值不允許再修改 var 定義變數,賦值之後仍然可以修改 常量 定義常量並且直接設定數值 let x 20 常量數值一經設定,不能修改,以下 會報錯 x 30 使用 型別 僅僅只定義型別,而沒有設定數值 let x1 int 常量有一次設定數值的機會,以下 沒有問題,因為 ...

Swift2學習 Swift概覽6 協議和擴充套件

協議和擴充套件 用protocol宣告乙個協議。protocol exampleprotocol mutating func adjust 類,列舉和結構體都可以接受協議。class class exampleprotocol var a class a.adjust let adescriptio...