Open6
Swift Zoomin' #18
エラーハンドリング
Typed propagation
Typed throws
いつ使うか?
- パッケージやモジュールに閉じていて、常に網羅的にエラーハンドリングしたいとき
- エラー型を素通りさせるとき
- 組み込み環境など(依存がない、 any Error が使えない)
逆にこれ以外の時は使うべきではないと書かれている
特に一つしかエラー型がない場合にこのエラーを返すと明示するために typed throws を書きたくなってもやらないこと
拡張性の妨げになる
このあたりは Java と異なる今までの Swift の感覚で明示しない慣習を思い出すこと
typed throws で例外の型検査もしてくれる
class ParentError: Error {}
calss ChildError: AnimalError {}
let child: () throws(ChildError) -> Void = {}
let parent: () throws(ParentError) -> Void = child
let child2: () throws(ChildError) -> Void = parent // コンパイルエラー。親を子に入れると throw できない可能性があるため