しめ鯖日記

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

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

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

The Swift Programming Language: About Swift

読んだ所

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

The Swift Programming Language: Enumerations

学んだこと

値付きの列挙型

Swiftenumは下のように値を持たせる事ができます。

enum Enum {
    case Value1(String)
    case Value2
    case Value3(Int)
}

変数を作る際は下のように書きます。

let e = Enum.Value1("AAA")

Swift2.0では下のように変数なしもできるようになったみたいです。

let e = Enum.Value1

switchの書き方

Switchは下のように書きます。

let e = Enum.Value1("AAA")

switch e {
case .Value1("A"): // これは引っかからない
    print(1)
case .Value1("AAA"): // これは引っかかる
    print(2)
case .Value1(_): // これはValue1ならなんでも引っかかる
    print(3)
case .Value1: // これもValue1ならなんでも引っかかる
    print(33)
case .Value2:
    print(4)
case .Value3(1):
    print(5)
}

下のように中身を変数として取得する事もできます。

let e = Enum.Value1("AAA")

switch e {
case .Value1(let a): // これはValue1ならなんでも引っかかる
    print(a)
case let .Value1(a): // この書き方もできる、中身に11つletを書く必要がないので複数の値を持つ場合に楽
    print(a)
}

再帰的なenum

Swift2.0から再帰的なEnumを作れるようになりました。
その際はindirectを付ける必要があります。

indirect enum Enum {
    case Value1(String)
    case Value2
    case Value3(Enum)
}

caseに対してindirectを付けても良いです。

enum Enum {
    case Value1(String)
    case Value2
    indirect case Value3(Enum)
}