try、try?、try

“try”需要用“ do catch”捕捉异常,如果在“try”代码块中出现异常,程序会跳转到相应的“catch”代码块中执行异常处理逻辑,然后继续执行“catch”代码块后面的代码。

enum NormalError: Error {
    case one
    case two
    case three
    case four
}

func someFunction(words: String) throws -> String {
    switch words {
    case "one":
        throw NormalError.one
    case "two":
        throw NormalError.one
    case "three":
        throw NormalError.one
    case "four":
        throw NormalError.one
    default:
        return "ok"
    }
}
//如果在“try”代码块中出现异常,程序会跳转到“catch”代码块中执行异常处理逻辑。
do {  
    try someFunction(words: "five")  
} catch {  
    print("An error occurred: \(error)")  
}

 “try?”是返回一个可选值类型,如果“try?”代码块中出现异常,返回值会是“nil”,否则返回可选值。可以在运行时判断是否有异常发生。

// 返回值是一个可选类型,如果执行正常的话就存在返回值,否则如果抛出错误的话返回值为nil
let result = try? say(words: "four")
// 可选绑定
if let res = try? doSomething(words: "four") {
}
else {  print("出现错误")  }
// 提前退出
guard let resu = try? say(words: "four") else { return }

 “try!”类似于可选型中的强制解包,它不会对错误进行处理,如果“try!”代码块中出现异常,程序会在异常发生处崩溃。

let result = try! someFunction()  
print("The result is \(result)")
print(try? divide(2,1))//divide 整数除法运算符(/)
// Optional(2.0)
print(try? divide(2,0))
// nil
print(try! divide(2,1))
// 2.0
print(try! divide(2,0))
// 崩溃

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值