|
|||||
|
対象: 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]
|
|||||