在 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
。 在其之中的**就會執行。等於說,給了你最後的機會來進行一些處理。如果你熟悉 bdd 或者 tdd, 那麼你可以參考他們中的aferall
機制
func
myfunction
() throws
guard let item = item else
guard item.count > maxnumber else
// do something with item
// ...
}
Swift 異常處理
open class func jsonobject with data data,options opt jsonserialization.readingoptions throws any所謂異常,便就是平常說的錯誤而已,swift引入異常機制,就是為了防止我們在程式設計中忽略一些導致崩潰的錯...
swift丟擲異常 Swift 2 0 異常處理
wwdc 2015 宣布了新的 swift 2.0.這次重大更新給 swift 提供了新的異常處理方法。這篇文章會主要圍繞這個方面進行討論。如何建造異常型別?在 ios 開發當中,我們會面對很多異常處理。在 cocoa touch 中我們使用 nserror 來進行異常處理。在新的 swift 2....
swift2 0異常處理
異常處理,英文名為exceptional handling,是代替日漸衰落的error code方法的新法,提供error code 所未能具體的優勢。異常處理分離了接收和處理錯誤 這個功能理清了程式設計者的思緒,也幫助 增強了可讀性,方便了維護者的閱讀和理解。異常處理 又稱為錯誤處理 功能提供了處...