- 爲什麼我需要爲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之間的錯誤處理行爲是不同的。