是否可以使用“try”检索保护语句内的异常?

问题描述 投票:0回答:2

在swift中,是否可以使用较短的

guard let try?
and进入else块时出现异常?

guard let smth = try? myThrowingFunc() else {
    print(error) //can I access the exception here somehow?
    return
}

let smth: AnyObject?
do {
    smth = try myThrowingFunc()
} catch let error {
    print(error)
    return
}
swift exception try-catch guard
2个回答
23
投票

我在“The Swift Programming Language (Swift 2.2 Prerelease)”中找到第 42 页,其中明确指出以下内容:

另一种处理错误的方法是使用

try?
将结果转换为可选。如果函数抛出错误,丢弃特定错误,结果为
nil
。否则,结果是一个包含函数返回值的可选值。

所以,这更像是对苹果的功能请求。事实上,这里已经有一些关于这个话题的讨论:

http://thread.gmane.org/gmane.comp.lang.swift.evolution/8266


0
投票

不幸的是,我们不能。

我在这个 discussion 中找到了 Chris Lattner 自己对这个问题的回答。

这与我们目前拥有的不一致,因为“if let”和“guard let”匹配一个可选的并且成功,前提是可选的存在。您似乎是在说语句后面出现的“catch”会影响我们拥有的这种非常原始的行为。 我不太相信这个提议,因为它增加了复杂性和糖分,但我还没有看到它普遍存在的强烈动机。这并不是说它不常见且不值得,只是我还没有看到任何证据。

© www.soinside.com 2019 - 2024. All rights reserved.