Swift-異常處理

1.什麼是異常

如果你對Swift有過使用,你就會發現有的方法會出現關鍵詞throws,比如我們解析JSON文件時,會使用以下方法:

    open class func jsonObject(with data: Data, options opt: JSONSerialization.ReadingOptions = []) throws -> Any

所謂異常,便就是平常說的錯誤而已,Swift引入異常機制,就是爲了防止我們在編程中忽略一些導致崩潰的錯誤,接下來,我們就來了解異常機制吧。

2.異常處理

當我們在調用Swift的方法時,如果後面有throws關鍵詞時,一定要注意使用異常機制,處理異常需要用到關鍵詞try。在Swift中有3種處理異常方式:

  1. try
  2. try?
  3. try!

1.try方式

使用try處理異常,當方法出現異常時,是由程序員來處理異常而不是系統來處理,代碼結構如下:

let url = URL.init(string: "http://www.baidu.com")
    do {
         let jsonData = try Data.init(contentsOf: url!, options: Data.ReadingOptions.alwaysMapped)
           // 處理數據
           print(jsonData)
       } catch {
           // 處理異常
           print(error)
       }

一般來說,這種方式很少使用,因爲可能有大量的代碼放入到異常中或者非異常的括號中,這樣代碼可讀性不好。

2.try?方式

相對於將異常由程序員來處理,交給電腦來處理毫無疑問是最好的方法了,而try?就做到了這一點:

let url = URL.init(string: "http://www.baidu.com")
guard let jsonData = try? Data.init(contentsOf: url!, options: Data.ReadingOptions.alwaysMapped) else {
     return
}

沒有異常就會返回數據,有異常就返回nil,配合Swift的guard機制,簡直不能在爽了,哈哈。

3.try!方式

相對於以上處理方式,try!毫無疑問最簡單粗暴也是最危險的,那就是,你的代碼是絕對不會出現異常的:

let url = URL.init(string: "http://www.baidu.com")
let jsonData = try! Data.init(contentsOf: url!, options: Data.ReadingOptions.alwaysMapped)

額,萬一出現異常了,會怎麼樣?
崩掉。

3.結論

介紹了三種異常處理,毫無疑問,使用try?和guard是最合適的了,當然,try!最不推薦,除非你的代碼不會拋出異常

但是,誰能保證了?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章