この記事では「The Swift Programming Language」を1から読んだ感想とか発見を書いてみようと思います。
「The Swift Programming Language」とはSwiftの公式ドキュメントでiBooksや下ページで見る事ができます。
The Swift Programming Language (Swift 2.1): About Swift
読んだ所
今回はError Handling
という項目を読みました。
The Swift Programming Language (Swift 2.1): Error Handling
学んだこと
throws/throw
エラーは下のように発生させます。
エラーが起こりうるメソッドではメソッドにthrowsを付ける必要があります。
enum MyError: ErrorType { case Error1 case Error2(message: String) } func method() throws { throw MyError.Error2(message: "") }
Initializerにthrowsを付ける事もできます。
class MyClass { init() throws { throw MyError.Error1 } }
try
エラーを投げる可能性のあるメソッドを呼ぶ際は下のようにdo-catchで囲んでtryを付ける必要があります。
do { try MyClass() } catch MyError.Error2(_) { } catch { }
try?を使えばdo-catchは不要になります。
この場合、value
はオプショナル型です。
let value = try? MyClass()
try!を使うとオプショナル型にならない代わりにエラー時にアプリがクラッシュします。
let value = try! MyClass()
throws
付きのメソッド内で呼ぶ場合はtryだけでも構いません。
func method() throws { let value = try MyClass() }
rethrows
メソッドはthrowsの代わりにrethrowsを使える事があります。
rethrowsは引数がクロージャーで、かつそれがエラーを発生しうる時だけ定義できます。
rethrowsを使うと通常のthrowが使えなくなります。
func method(closure:() throws ->Void) rethrows { try closure() // throw MyError.Error1 // throwsだとこれもできるけどrethrowsではできない }