- do-try-catchステートメントでカスタムエラーがスローされただけで、do-try-catchの一般的な文を指定する必要があるのはなぜですか? ?
- Xcode ProjectとPlaygroundでこの動作が異なるのはなぜですか?
iOSアプリケーションで簡単なSwiftのdo-try-catchエラーを使用しようとしました。Xcodeプロジェクトとプレイグラウンドの違いによるスウィフトエラー処理の違い
enum FooError: Error {
case foo
}
func fooFunc() throws {
throw FooError.foo
}
この関数を呼び出すと、エラー番号FooError.foo
しか捕捉しようとしませんでした。
これはコンパイルエラー"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ステートメントは、一般的なキャッチせずに、既に網羅あるが、私がそれを追加する必要がありそうです。
Playgroundでこのコードを実行すると、奇妙なことも一般的にcatch
のステートメントは必要ありません。
do {
try fooFunc()
} catch FooError.foo {
print("foo error is thrown.")
}
Xcode ProjectとPlaygroundの間でエラー処理の動作が異なるのはなぜかと思いました。