苹果官方文档 -异常处理
中国官方文档 - 异常处理
说明
跟其它语言一样,Swift的异常处理是在程序抛出异常后的处理逻辑。 Swift提供了一流的异常抛出、捕获和处理的能力。跟Java语言类似, Swift的异常并不是真正的程序崩溃, 而是程序运行的一个逻辑分支;Swift和Java捕获异常的时序也是一样的。当Swift运行时抛出异常后并没有被处理, 那么程序就会崩溃。
在Swift语言中使用Error表示异常, 作用同Java的Exception类或Object-C的NSError类。 苹果建议使用枚举作为异常类型(为什么不推荐用类或者结构体?答案是枚举数据类型本身就是分成若干种情况,很适合做逻辑分支判断条件)。
1.定义错误枚举:注意Swift的所有异常类型都继承于Error
enum ErrorCollection:Error {
case errorOne
case errorTwo
case errorThree
}
2.定义一个异常函数,只需要在函数的参数后面 添加一个 throws 就可以了(如果函数有返回值,需要在 -> 的前面)
func canThrowErrors(type:Int) throws -> (String) {
//有关于 defer 关键字,就是抛出异常之后会执行的语句,
defer {
print("error:\(type)")
}
switch type {
case 1:
throw ErrorCollection.errorOne
case 2:
throw ErrorCollection.errorTwo
case 3:
throw ErrorCollection.errorThree
default:
break
}
return "success"
}
3.异常处理的使用 do catch ,如果得知 " let hh = try canThrowErrors(type: 1)" 抛出异常,我们不希望执行 后面的语句,我们就要使用 try 如果抛出异常也要执行 后面的语句,我们就要使用 try ?,try! 使用不当会让程序奔溃(除非你肯定这句代码不会抛出异常,你就可以用try !)
注意:如果try语句抛出异常则会跳出do代码块,并按顺序逐个catch,当一个catch捕获成功后,后面的catch不再执行
do {
let hh = try canThrowErrors(type: 1)
print(hh)
if hh != nil {
print("error:\(hh)")
}
} catch ErrorCollection.errorOne {
print(ErrorCollection.errorOne)
}catch ErrorCollection.errorTwo {
print(ErrorCollection.errorTwo)
}catch {
print("error")
}
}
SuperD总结
1.Swift 异常处理是为了让我们程序更安全,平常开发用处不多