新的異常捕獲機制更新於 WWDC 2015上發佈的新的Swift2.0,異常的try-catch機制有助於咱們更快的定位出錯緣由所在,此處簡單說明下try-catch機制的用法.
1.定義枚舉異常值
首先咱們能夠建立本身的異常枚舉值,這要實現ErrorType協議,只不過這個協議是空的,咱們加上就好.
2.拋出異常
咱們能夠在方法中拋出異常,定義拋出異常的方法很簡單,只須要在返回值的 -> 前面加上throws就行了,示例以下:(這個方法是自定義的Dog類裏的一個實例方法,name.length()是爲系統的String類經過延展添加的方法)
3.捕獲異常
咱們能夠在調用可能拋出異常的方法後面加上catch關鍵字來捕獲異常
4.不處理異常
若是肯定某段可能拋出異常的代碼是不可能拋出異常的,則可使用try!來進行調用,可是若是一旦這段代碼拋出了一個異常,則會引發一個運行時的異常錯誤,因此請慎用.
結尾:
值得注意的是,在可能拋出異常的方法中,一但有一處拋出了一個異常,那麼這個方法則會馬上中止運行.拋出異常代碼後面的代碼都將不會獲得執行
附自定義Dog類和調用Dog類的代碼
enum DogError : ErrorType{
case NameInvalidError
case AgeInvalidError
case NameLengthError
}
class Dog: NSObject {
var name : String!
var age : Int!
init(name:String,age:Int){
self.name = name
self.age = age
}
func printDogMessage(dog:Dog) throws -> String{
print("Dog-Class:開始檢查名字是否無效")
guard let name : String = dog.name else{
throw DogError.NameInvalidError
}
print("Dog-Class:開始檢查名字長度是否無效")
if name.length() < 3{
throw DogError.NameLengthError
}
print("Dog-Class:開始檢查年齡是否無效")
if age < 0 || age > 20{
throw DogError.AgeInvalidError
}
print("Dog-Class:返回信息")
return "dog的信息爲" + dog.name + "\(dog.age)"
}
}
測試方法的代碼:
let myDog = Dog(name: "小白", age: 21)
var str : String!
do{
try str = myDog.printDogMessage(myDog)
}
catch {
switch (error){
case DogError.NameInvalidError: print("dog的名字無效錯誤")
case DogError.NameLengthError : print("dog的名字長度錯誤")
case DogError.AgeInvalidError : print("dog的年齡設置不合法")
default:print("Main:捕獲到dog其餘錯誤")
}
}
print("Main:最後輸出爲\(str)")