読者です 読者をやめる 読者になる 読者になる

しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Swift再入門32 − The Swift Programming Languageを読んでみる

この記事では「The Swift Programming Language」を1から読んだ感想とか発見を書いてみようと思います。
「The Swift Programming Language」とはSwiftの公式ドキュメントでiBooksや下ページで見る事ができます。

The Swift Programming Language (Swift 2.1): About Swift

読んだ所

今回はDeclarationsという項目を読みました。

The Swift Programming Language (Swift 2.1): Declarations

学んだこと

rethrows構文

rethrowsとは限定的なthrowsです。 下のようにthrowsを持つメソッドを引数にする場合のみ使えます。

func method(function: (Void) throws -> Void) rethrows -> Int {
    try function()
    
    return 1
}

rethrowsthrowsは引数のメソッドthrowsがない時に違いが出ます。
rethrowsの場合は引数のメソッドthrowsがない場合はdo-catchで囲む必要がなくなります。

func method1(function: (Void) throws -> Void) throws -> Int {
    try function()
    
    return 1
}
do {
    try method1({})
} catch {}
do {
    try method1({ _ throws in })
} catch {}

// rethrowsを使ったパターン
func method2(function: (Void) throws -> Void) rethrows -> Int {
    try function()
    
    return 1
}
method2({}) // 引数にthrowsがない場合はdo-catchで囲まなくて良い
do {
    try method2({ _ throws in })
} catch {}

Generics付きのenum

Optional型がそうなのですが、EnumGenericsを持つことができます。
下のように好きな型で初期化できます。

enum Tree<T> {
    case Empty
    case Node(value: T)
}

Tree.Node(value: 1)
Tree.Node(value: "11")