1.什麼是異常
如果你對Swift有過使用,你就會發現有的方法會出現關鍵詞throws,比如我們解析JSON文件時,會使用以下方法:
open class func jsonObject(with data: Data, options opt: JSONSerialization.ReadingOptions = []) throws -> Any
所謂異常,便就是平常說的錯誤而已,Swift引入異常機制,就是爲了防止我們在編程中忽略一些導致崩潰的錯誤,接下來,我們就來了解異常機制吧。
2.異常處理
當我們在調用Swift的方法時,如果後面有throws關鍵詞時,一定要注意使用異常機制,處理異常需要用到關鍵詞try。在Swift中有3種處理異常方式:
- try
- try?
- 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!最不推薦,除非你的代碼不會拋出異常
但是,誰能保證了?