sun.png
蘋果官方文檔 -異常處理
中國官方文檔 - 異常處理
說明
跟其它語言一樣,Swift的異常處理是在程序拋出異常后的處理邏輯。 Swift提供了一流的異常拋出、捕獲和處理的能力。跟Java語言類似, Swift的異常并不是真正的程序崩潰, 而是程序運行的一個邏輯分支;Swift和Java捕獲異常的時序也是一樣的。當Swift運行時拋出異常后并沒有被處理, 那么程序就會崩潰。
在Swift語言中使用Error表示異常, 作用同Java的Exception類或Object-C的NSError類。 蘋果建議使用枚舉作為異常類型(為什么不推薦用類或者結構體?答案是枚舉數據類型本身就是分成若干種情況,很適合做邏輯分支判斷條件)。
1.定義錯誤枚舉:注意Swift的所有異常類型都繼承于Error
enum ErrorCollection:Error {
case errorOne
case errorTwo
case errorThree
}
2.定義一個異常函數,只需要在函數的參數后面 添加一個 throws 就可以了(如果函數有返回值,需要在 -> 的前面)
func canThrowErrors(type:Int) throws -> (String) {
//有關于 defer 關鍵字,就是拋出異常之后會執行的語句,
defer {
print("error:\(type)")
}
switch type {
case 1:
throw ErrorCollection.errorOne
case 2:
throw ErrorCollection.errorTwo
case 3:
throw ErrorCollection.errorThree
default:
break
}
return "success"
}
3.異常處理的使用 do catch ,如果得知 " let hh = try canThrowErrors(type: 1)" 拋出異常,我們不希望執行 后面的語句,我們就要使用 try 如果拋出異常也要執行 后面的語句,我們就要使用 try ?,try! 使用不當會讓程序奔潰(除非你肯定這句代碼不會拋出異常,你就可以用try !)
注意:如果try語句拋出異常則會跳出do代碼塊,并按順序逐個catch,當一個catch捕獲成功后,后面的catch不再執行
do {
let hh = try canThrowErrors(type: 1)
print(hh)
if hh != nil {
print("error:\(hh)")
}
} catch ErrorCollection.errorOne {
print(ErrorCollection.errorOne)
}catch ErrorCollection.errorTwo {
print(ErrorCollection.errorTwo)
}catch {
print("error")
}
}
SuperD總結
1.Swift 異常處理是為了讓我們程序更安全,平常開發用處不多