Error Handling
昨日に引き続き https://docs.swift.org/swift-book/LanguageGuide/ErrorHandling.html を読む。
- Swiftでは、エラーは、
Error
プロトコルに準拠した型の値として表される - Swiftの列挙型はエラー状態に関連したグループをモデル化するのに特に適している
- Swiftではエラーハンドルの方法は4つある
- エラーを伝播させる
-
do
〜catch
構文でハンドリング - オプショナル値として
- エラーは起きないものとして
- Swiftのエラーハンドリングはコールスタックの巻き戻しはしない
throw
文の性能特性は、return
文のと同じくらい
- エラーを投げれば関数はエラーを伝播できる
- エラーを投げない関数の内側では、エラーをハンドリングしなければならない
guard
ステートメントでメソッドを早く抜ける- エラーを投げる関数を呼ぶには
try
キーワードを前につけて do
節でエラーが投げられるかもしれない関数を呼んで、catch
節でどのエラーに対するか決定するcatch
のパターンはcase
みたいな感じで- 最後の
catch
節ではエラーはローカル変数error
に束縛される - 列挙型でキャッチ
catch is VendingMachineError
try?
式でオプショナル値に変換let x = try? someThrowingFunction()
try!
式で、エラーは起きないものという実行時 assertionにしてしまうlet image = try! loadImage(〜)
defer
で現在のスコープが終わるまで実行を後回しする- deferred文では、ステートメント外へ制御を移す
berak
やreturn
やthrow
はできない - 同一スコープで複数
defer
を書いたら、ソースコード順で後のやつから順に呼び出される - エラー処理じゃなくても
defer
構文は使える
最近Web上のSwiftの記事なんかを見て 「読める…読めるぞ!」という雰囲気になってきたので 学習高原に達した気がする。