【Swift】Swift2.0からのエラーハンドリング:try, do-catchとdefer

Swift2.0からのエラーハンドリング の投稿一覧

概要

例外を投げる可能性のあるメソッドを呼び出す場合、引数にerror定義を書くだけで良かったものが外側に書く必要がでてきました。
この投稿でビルドに失敗したのも、Swift1.2から2.0に更新されたことを知らなかったことが原因です。

またSwiftでは、他言語でいうtry-catch-finally構文のようなものが用意されています。

構文

tryとdo-catch

例外を投げる可能性のあるメソッドを呼び出す時、メソッドの前にtryを記述する必要がある。
また、tryの行はdo{}で囲み、catchに例外時の処理を記述しなければならない。

do-catchとdefer

doの中身が実行された後に必ず実行される処理をdefer{}内に記述できる。

この場合、printされるのは次の順となる。
do1 > do2 > defer > catch

tryで例外となった場合、以降のdo{}内の処理は実行されない。
そのため、次の様な記述だとdefer{}内の処理は実行されない。

この場合、printされるのは次の順となる。
do1 > catch

try!

プログラマが、例外を吐く可能性のあるメソッドが参照される時に必ず例外とならない確信がある場合は、tryに!を付けてdo-catchを省略して記述できる。