编程常见错误:
1、语法(编译错误)
2、 逻辑错误
3、 运行时(异常、闪退)
通过error协议自定义运行时的错误信息
enum SomeError : Error {
case ary(String)
case outOfBounds(Int,Int)//越界
case outOfMemory//内存溢出
}
通过throw抛出自定义error,需要加throws声明
func divide(_ v1: Int,_ v2:Int) throws -> Int{
if v2 == 0 {
throw SomeError.ary("0不能作为除数")
}
return v1/v2
}
do-catch捕捉Error
func test(){
do {
try divide(10, 0)
} catch let SomeError.ary(msg) {
print("参数错误",msg)
} catch let SomeError.outOfBounds(size, int){
print("数组越界\(size)和\(int)")
} catch SomeError.outOfMemory {
print("内存溢出")
} catch {
print("其他错误")
}
}
test()
打印结果:参数错误 0不能作为除数
不捕捉error,在当前函数增加throws声明,Error会自动抛给上层函数
func test1() throws{
print("1")
print(try divide(20, 0))
print("test1")
}
try? test1()
打印结果:1
如果使用try! test1()会抛异常