新的异常捕获机制更新于 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)")