序言:标题之所以没有写成do-try-catch,而写成do-catch & try,我个人觉得后者更有助于理解。
- 首先,swift2开始启用跟swift1不一样的错误处理模式,即do-catch & try。swift1和OC都是用的我们熟悉的(NSError)模式,这种模式,开发者可以传入nil作为(NSError)参数,从而不对错误进行处理,这样的话在有错误发生时,因为没有进行相应的处理,程序会发生运行时退出。
- 以下简单介绍一下do-catch & try模式:
do-catch & try语法
do {
try //throw error语句
//没有错误发生时的后续语句
}catch {
//错误处理语句
}
简单一个应用例子如下:
//自定义错误类型枚举
enum Yterror: Error{
case err1
case err2
case err3
}
//有抛出错误的方法
func getNetwordData() throws {
throw Yterror.err1 //抛出错误
}
//调用函数
func myMethod() {
do{
try getNetwordData() //必须要有try
}catch let error{
print("error:\(error)")//捕捉到错误,处理错误
}
}
知识点
- 可以抛出错误的方法必须在方法声明的后面加上throws关键字,表示该方法可以抛出错误。当方法没有返回值时,throws放在参数后面;当方法有返回值时,throws放在参数和返回值之间;
func throwMethod1() throws{
//方法体
}
func throwMethod2(_ parameter:Int8) throws ->(Bool){
}
- try?和try!的用法
使用try?和try!,则可以不用do-catch语句包裹try?和try!,try后面的可以抛出错误的语句不用do-catch包裹。
- try?和try!的用法
其中,try?修饰的时候,如果throws方法抛出错误,则方法返回nil,反之如果没有发送错误则返回可选值。
try!修饰的时候,可以打断错误传播链,throws方法的错误不传播给调用者,这样的话一定要去确保程序不发送错误,否则程序会在发生错误时退出。
网友评论