【发布时间】:2017-07-17 08:01:58
【问题描述】:
- 为什么我需要为 do-try-catch 提供一般的
catch语句,即使我确定我的自定义错误只在 do-try-catch 语句中抛出? - 而且,为什么 Xcode Project 和 Playground 之间的这种行为不同?
我尝试在我的 iOS 应用程序中使用一个简单的 Swift 的 do-try-catch 错误。
enum FooError: Error {
case foo
}
func fooFunc() throws {
throw FooError.foo
}
当我调用这个函数时,我试图只捕获FooError.foo 错误。
override func viewDidLoad() {
super.viewDidLoad()
do {
try fooFunc()
} catch FooError.foo {
print("foo error is thrown.")
}
}
但这得到了一个编译错误"Errors thrown from here are not handled because the enclosing catch is not exhaustive"。
抛出这个编译错误的原因是我的catch语句不够,我可以通过添加通用catch语句来修复这个错误。
override func viewDidLoad() {
super.viewDidLoad()
do {
try fooFunc()
} catch FooError.foo {
print("foo error is thrown.")
} catch {
print("something else wrong happened. \(error)")
}
}
我以为fooFunc 只会抛出FooError,所以catch 语句在没有一般catch 的情况下已经详尽无遗,但似乎我需要添加它。
甚至奇怪的是,当我在 Playground 上运行此代码时,不需要一般的 catch 语句。
do {
try fooFunc()
} catch FooError.foo {
print("foo error is thrown.")
}
我想知道为什么 Xcode Project 和 Playground 之间的错误处理行为不同。
【问题讨论】:
标签: ios swift xcode error-handling swift-playground