Swift 2 0 異常處理

2022-08-20 17:51:10 字數 2181 閱讀 6036

如何建造異常型別?

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

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

enum

myerror: errortype

如何丟擲異常

在丟擲異常之前,我們需要在函式或方法的返回箭頭 -> 前使用 throws 來標明將會丟擲異常

func mymethodretrunstring() throws ->string

//no return, we can just add throws in the end

func mymethodretrunnothing() throws

宣告之後, 我們需要在函式或者方法裡扔出異常,很簡單使用throw 就可以了

func mymethod() throws

//...

//item is an optional value

guard let item = item else

//do with item

}

上面這段**使用了 guard 來進行unwrap optional value。這是 swift 2.0 提供的乙個新的方法。

guard

在 haskell, erlang 等語言中早已存在 guard, 在這裡有更多關於它的介紹。

guard 翻譯過來可以理解為守護,守衛。

在 swift 中,guard 有點像 if 但是他們有兩個非常重要的區別

guard 中的 else 只能執行轉換語句,像 return, break, continue 或者 throws 當然你也可以在這裡返後乙個函式或者方法。

值得注意的是,guard的使用會提高你**的可讀性,但是也代表你的**的執行會有非常明確的順序性,這一點需要開發者們留心處理。

雖然我們在異常處理中提到了 guard 但是不代表它只能在異常處理中使用。它具有廣泛的適用性,或許過陣子我會專門為 guard的使用寫篇文章。

如何獲取並處理異常?

上文講述了如何建造丟擲異常,獲取和處理異常就變得很簡單了。使用 do-catch 機制。

do

catch

do-catch 機制簡單易懂。很多程式語言也使用類似的機制進行異常處理,但是在 swift 中有乙個比較重要的特性。

do

catch

myerror.notexist catch

myerror.outofrange

這裡值得提一下在 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 

guard let item = item else

guard item.count > maxnumber else

//do something with item

//...}

swift2 0異常處理

異常處理,英文名為exceptional handling,是代替日漸衰落的error code方法的新法,提供error code 所未能具體的優勢。異常處理分離了接收和處理錯誤 這個功能理清了程式設計者的思緒,也幫助 增強了可讀性,方便了維護者的閱讀和理解。異常處理 又稱為錯誤處理 功能提供了處...

Swift2 0異常處理

在丟擲異常之前,我們需要在函式或方法的返回箭頭 前使用 throws 來標明將會丟擲異常 func mymethodretrunstring throws string func mymethodretrunnothing throws func mymethod throws do catch m...

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

wwdc 2015 宣布了新的 swift 2.0.這次重大更新給 swift 提供了新的異常處理方法。這篇文章會主要圍繞這個方面進行討論。如何建造異常型別?在 ios 開發當中,我們會面對很多異常處理。在 cocoa touch 中我們使用 nserror 來進行異常處理。在新的 swift 2....