在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
}
我在“The Swift Programming Language (Swift 2.2 Prerelease)”中找到第 42 页,其中明确指出以下内容:
另一种处理错误的方法是使用
将结果转换为可选。如果函数抛出错误,丢弃特定错误,结果为try?
。否则,结果是一个包含函数返回值的可选值。nil
所以,这更像是对苹果的功能请求。事实上,这里已经有一些关于这个话题的讨论:
http://thread.gmane.org/gmane.comp.lang.swift.evolution/8266
不幸的是,我们不能。
我在这个 discussion 中找到了 Chris Lattner 自己对这个问题的回答。
这与我们目前拥有的不一致,因为“if let”和“guard let”匹配一个可选的并且成功,前提是可选的存在。您似乎是在说语句后面出现的“catch”会影响我们拥有的这种非常原始的行为。 我不太相信这个提议,因为它增加了复杂性和糖分,但我还没有看到它普遍存在的强烈动机。这并不是说它不常见且不值得,只是我还没有看到任何证据。