swift抛出异常_swift之异常处理

  • Post author:
  • Post category:其他


官网地址:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html#//apple_ref/doc/uid/TP40014097-CH42-ID508

1、定义枚举异常值

我们可以定义自己的异常枚举值,要遵循Error协议,Error协议是空的,不用实现任何东西。例如:

enumVendingMachineError: Error {caseinvalidSelectioncaseinsufficientFunds(coinsNeeded: Int)caseoutOfStock

}

2、定义抛出异常的方法

要定义抛出异常的方法,只需要在返回值的->前面加上throw就好了,例如:

func canThrowErrors() throws -> String

3、捕获异常

swift捕获异常有三种方法:

try方式 手动捕获异常

func test()->Void{do{

print(1)

let data=Data()tryJSONSerialization.jsonObject(with: data, options: .mutableContainers)//会被阻断

print(“2”)

}catch{

print(error)

}

print(“3”)

}

try?方式(常用)系统帮助我们处理异常,如果该方法出现异常,则该方法返回nil。如果没有异常,则返回对应的对象

func test()->Void{

print(“1”)

let data=Data()

guard (try? JSONSerialization.jsonObject(with: data, options: .mutableContainers)) != nil else{

print(“2”)return}

print(“3”)

}

try!方法(不建议,非常危险)直接告诉系统,该方法没有异常。注意:如果该方法出现了异常,那么程序会报错

func test()->Void{

print(“1”)

let data=Data()

let result= try!JSONSerialization.jsonObject(with: data, options: .mutableContainers)

print(“3”)

}

4、guard用法

与if语句相同的是,guard也是基于一个表达式的布尔值去判断一段代码是否该被执行。与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码。你可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。下面两段代码是等价的:

func fooBinding(x: Int?) {if let x = x where x > 0{//使用x

x.description

}//如果值不符合条件判断,就执行下面的代码

}

func fooGuard(x: Int?) {

guard let x= x where x > 0 else{//变量不符合条件判断时,执行下面代码

return}//使用x

x.description

}



版权声明:本文为weixin_34378815原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。