Swift2.0からエラーハンドリングができるようになった。
// 独自のエラータイプはErrorTypeプロトコルに準拠する
enum MyError: ErrorType {
case Error1, Error2(message: String), Error3
}
// エラーを投げる可能性のあるメソッドにはthrowsをつける
func test(e: MyError?) throws {
if let error = e {
throw error
}
print("成功")
}
do {
// エラーを投げる可能性のあるメソッドを呼ぶときはtryをつける
try test(.Error2(message: "メッセージ"))
// ここは呼ばれない
}catch MyError.Error1 {
// switch文のようにエラーのタイプごとにcatchできる
print("Error1")
}catch MyError.Error2(let message) {
print("Error2")
print(message)
}catch {
// catchで具体的なエラータイプを指定しなかった時、errorで投げられたエラーを取得できる
print(error)
}
try
をつけてメソッドを呼ぶ場合、必ず、do
で囲って、catch
でエラーを補足する必要があるようです。
ただ、場合によって絶対にエラーを投げないんだよなって時もある。
そんな時はtry!
にするとdo
とcatch
を省略できる。
try!
付きで呼んだメソッドがエラーを投げるとランタイムエラーになる。
try! test(nil)
詳しくは iBooks The Swift Programming Language (Swift 2 Prerelease)