対象: tryキーワードによるエラーハンドリング(Swift)Foundation Frameworkのクラスを使うとき、実行時にエラーがスローされる可能性のあるメソッドがある。このようなランタイムエラーは、tryキーワードを使って簡単にハンドリングできる。 try?キーワードはエラーをOptionalに変換してくれる。従って、メソッドがランタイムエラーをスローする可能性がある場合、そのメソッドの戻り値をif文で評価してnilでなければエラーはないと分かる。 if let num = try? throwingError(0) { print(num) } else { print("Error!") } try!キーワードはランタイムエラーの伝搬(=コンパイル時チェック)を無効にしてくれる。メソッドはランタイムエラーをスローする可能性があるが、実際にはエラーにならない場合、try!キーワードでエラーの伝搬を無効にすることができる。The Swift Programming Languageでは、アプリ内の画像をロードする場合が例として挙げられている。 let num = try! throwingError(0) Do-Catchを使ってエラー時の処理を書くこともできる。catch節でパターンを指定することができるので、エラーの種類別に処理をしたい時には有効な手段となる。catch節でエラーの種類を指定したくない場合、何も書かなければすべてにマッチする。また、catch節は上から順に評価されるので、以下のようにいくつかのエラーとそれ以外で処理を分けた書き方も可能である。 do { let num = try throwingError(3) print(num) } catch TestError.first { print("first") } catch TestError.second { print("second") } catch { print("Error!") } エラーをスローするメソッドのほうは、例えばこんな風に書ける。エラーをスローする可能性のあるメソッドは、引数リストの後にthrowsを宣言する。 enum TestError: Error { case first case second case otherwise } func throwingError(_ sw: Int) throws -> Int { if sw == 1 { throw TestError.first } else if sw == 2 { throw TestError.second } else if sw >= 3 { throw TestError.otherwise } return 100 } (2015/10/18) () Swift 3.0対応。
Copyright© 2004-2019 モバイル開発系(K) All rights reserved.
[Home]
|