加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 试试,试试! &try?有什么区别,什么时候使用每个?

发布时间:2020-12-14 06:02:30 所属栏目:百科 来源:网络整理
导读:在 Swift 2.0,苹果推出了一种新的方式来处理错误(do-try-catch)。 几天前在Beta 6中引入了一个更新的关键字(试试?)。 此外,知道我可以使用try! 3个关键字之间有什么区别,以及何时使用每个? 假设以下投掷函数: enum ThrowableError : ErrorType { case
在 Swift 2.0,苹果推出了一种新的方式来处理错误(do-try-catch)。
几天前在Beta 6中引入了一个更新的关键字(试试?)。
此外,知道我可以使用try!
3个关键字之间有什么区别,以及何时使用每个?
假设以下投掷函数:
enum ThrowableError : ErrorType { case BadError }

func doSomething() throws -> String {
    if everythingIsFine {
        return "Everything is ok"
    } else {
        throw ThrowableError.BadError
    }
}

尝试

当你尝试调用一个可能抛出的函数时,你有两个选项。

您可以通过在do-catch块中包围您的调用来负责处理错误:

do {
    let result = try doSomething()
}
catch {
    // Here you know about the error
    // Feel free to handle to re-throw
}

或者只是尝试调用该函数,并将错误传递给调用链中的下一个调用者:

func doSomeOtherThing() throws -> Void {    
    // Not within a do-catch block.
    // Any errors will be re-thrown to callers.
    let result = try doSomething()
}

尝试!

当你试图访问一个隐藏的解包可选的内部有一个nil会发生什么?是的,真的,应用程序会崩溃!
同样的尝试!它基本上忽略了错误链,并声明了一个“做或死”的情况。如果被调用函数没有抛出任何错误,一切都很好。但如果它失败并抛出一个错误,你的应用程序将会崩溃。

let result = try! doSomething() // if an error was thrown,CRASH!

尝试?

一个在Xcode 7 beta 6中引入的新关键字。它返回一个可选的展开成功值,并通过返回nil来捕获错误。

if let result = try? doSomething() {
    // doSomething succeeded,and result is unwrapped.
} else {
    // Ouch,doSomething() threw an error.
}

或者我们可以使用新的awesome guard关键字:

guard let result = try? doSomething() else {
    // Ouch,doSomething() threw an error.
}
// doSomething succeeded,and result is unwrapped.

最后一点要注意,通过使用try?请注意,您将丢弃发生的错误,因为它被翻译为零。使用try?当你更多地关注成功和失败,而不是为什么失败。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读