swift 異常捕獲try catch的使用

新的異常捕獲機制更新於 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)")
相關文章
相關標籤/搜索