异常捕获
2020-03-12 本文已影响0人
Harely
Swift异常处理的历史由来
- Swift1.0版本 Cocoa Touch 的 NSError ,Swift并没有真正的具备自己的异常处理机制;
- Swift2.0版本 加入 ErrorType protocol;
- Swift3.0版本 改名 Error protocol;
Swift3.0 Error protocol 的使用首先定义一个枚举,集成协议Error (Swift 2.0 的协议叫做ErrorType,3.0后协议改名Error)
enum MyError : Error {
case one
case two
case three
}
三者区别
- try 出现异常处理异常
- try? 不处理异常,返回一个可选值类型,出现异常返回nil
- try! 不让异常继续传播,一旦出现异常程序停止,类似NSAssert()
try? 的使用
try?
, 如果不想处理异常那么可以用这个关键字,使用这个关键字返回一个可选值类型,如果有异常出现,返回nil.如果没有异常,则返回可选值
func testFunc(str: String) throws -> String {
if str == "one" {
throw MyError.one
}else if str == "two" {
throw MyError.two
}else if str == "three" {
throw MyError.three
}
return "ok"
}
let str = try? testFunc(str: "three")
print(str)
打印:nil
throws和throw的使用
do {
let str = try testFunc(str: "three")
let str1 = try testFunc(str: "333")
print("++++>> \(str)")
print("--->> \(str1)")
} catch MyError.one {
print("MyError.one")
} catch MyError.two {
print("MyError.two")
} catch let error as MyError {
print(error)
} catch {
}
///或者如下
do {
let str = try testFunc(str: "three")
let str1 = try testFunc(str: "333")
print("++++>> \(str)")
print("--->> \(str1)")
} catch MyError.one {
print("MyError.one")
} catch MyError.two {
print("MyError.two")
} catch {
print(error)
}
都打印为:three
try!
如果不想处理异常,而且不想让异常继续传播下去,可以使用try!.这有点儿类似NSAssert().但是一旦使用try!后,在可能抛出异常的方法中抛出了异常,那么程序会立刻停止.
let str = try! testFunc(str: "three")
print(str)
程序Crash