Swift小知识点之try try! try?使用和区别
-
OC中的catch捕捉
-
使用NSAssert(断言)不符合条件的主动崩溃
- (void)check:(NSString *)name age:(NSInteger)age{ NSAssert(name.length>0, @"name is nil"); NSAssert(age>0 && age<120, @"age is outof rang 0...120"); }
-
还有另外一种被动报错,可以捕捉到catch中的
@try { NSArray *list = @[]; list[2]; } @catch (NSException *exception) { //这里报错才会执行 NSLog(@"%@",exception.description); } @finally { //这里一定会执行 }
实际输出是:但是不会崩溃。
*** -[__NSArray0 objectAtIndex:]: index 2 beyond bounds for empty NSArray
-
-
Swift中的catch捕捉
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 onecase twocase three}-
throws和throw的使用
使用throws放在参数列表后面标明一个方法有异常抛出,标准格式 :
func 方法名字 (参数列表) throws -> 返回值类型 并在方法内使用throw抛出异常
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" }
-
使用do-catch处理异常
do { var str = try testFunc(str: "three") } catch MyError.one { print("MyError.one") } catch MyError.two { print("MyError.two") } catch let error as MyError { print(error) }
-
try?的使用
Swift2.0 后加入了新的关键字
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" } var str = try? testFunc(str: "three") print(str)
控制台输出
`nil Program ended with exit code: 0`
-
try!的使用
如果不想处理异常,而且不想让异常继续传播下去,可以使用try!.这有点儿类似NSAssert().但是一旦使用try!后,在可能抛出异常的方法中抛出了异常,那么程序会立刻停止.例子如下
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" } var str = try! testFunc(str: "three")
控制台:程序奔溃掉~
-
try try? try! 的区别
try 出现异常处理异常
try? 不处理异常,返回一个可选值类型,出现异常返回nil
try! 不让异常继续传播,一旦出现异常程序停止,类似NSAssert()
-
浙公网安备 33010602011771号