Error Handling

昨日に引き続き https://docs.swift.org/swift-book/LanguageGuide/ErrorHandling.html を読む。

  • Swiftでは、エラーは、Errorプロトコルに準拠した型の値として表される
  • Swiftの列挙型はエラー状態に関連したグループをモデル化するのに特に適している
  • Swiftではエラーハンドルの方法は4つある
    1. エラーを伝播させる
    2. docatch 構文でハンドリング
    3. オプショナル値として
    4. エラーは起きないものとして
  • 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文では、ステートメント外へ制御を移すberakreturnthrowはできない
  • 同一スコープで複数 defer を書いたら、ソースコード順で後のやつから順に呼び出される
  • エラー処理じゃなくても defer 構文は使える

最近Web上のSwiftの記事なんかを見て 「読める…読めるぞ!」という雰囲気になってきたので 学習高原に達した気がする。