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)")
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM