- 为什么我需要为do-try-catch提供一般的
catch
语句,即使我确定我的自定义错误只是在do-try-catch语句中抛出? - 而且,为什么Xcode Project和Playground的行为不同?
我试图在我的iOS应用程序中使用一个简单的Swift的do-try-catch错误。Xcode Project和Playground之间关于Swift错误处理的区别
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
声明。
do {
try fooFunc()
} catch FooError.foo {
print("foo error is thrown.")
}
我想知道为什么Xcode Project和Playground之间的错误处理行为是不同的。