しめ鯖日記

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

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

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

The Swift Programming Language: About Swift

読んだ所

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

The Swift Programming Language: Control Flow

学んだこと

Dictionaryのfor-in

Dictionaryのfor-inは下のように書きます。
1つ1つの要素はTupleで返ってくるので(key, value)と宣言すればキーと値を取得できます。

let dic = ["A": 1, "B": 2, "C": 3]
for (key, value) in dic {
    print(key)
    print(value)
}

キーが不要な場合は_を使って捨てる事もできます。

let dic = ["A": 1, "B": 2, "C": 3]
for (_, value) in dic {
    print(value)
}

Switchの条件

SwiftのSwitch文は下のように書きます。
breakが不要なのが嬉しいですね。

let value = 1
switch value {
case 1:
    print(1)
case 2:
    print(2)
}

このcaseの部分ですが下のように複数条件を入れる事ができます。

let value = 1
switch value {
case 1, 2, 3:
    print(1)
case 4, 5:
    print(2)
}

Rangeを入れる事もできます。
なぜかRangeを使う場合はdefaultを使用するよう言われたのでdefaultを追加しました。

let value = 1
switch value {
case 1...3:
    print(1)
case 4...5:
    print(2)
default: break
}

_を使うとdefaultと同じような動作を実現できます。

let value = 1
switch value {
case _:
    print(2) // 常にこれは呼ばれる
}

TupleのSwitch

TupleのSwitchは下のように書きます。
片方のプロパティーだけチェックしたい時は_を利用します。

let value = (1, 2)
switch value {
case (1, 2):
    print(1)
case (1, _):
    print(2)
case (0...2, 0...2):
    print(3)
default: break
}

Switchの値のbinding

Swiftでは下のようにcase内で変数の宣言ができます。

let value = (1, 2)
switch value {
case (let x, 2):
    print(x) // → 1
default: break

Tuple以外でも同様の事ができます。
この場合case let x:はdefaultと同じような動きになります。

let value = 1
switch value {
case let x:
    print(x)
}

switch文内のwhere

Switch文ではwhereも使う事ができます。

let value = (1, 2)
switch value {
case (let x, let y) where value.0 == x:
    print(x)
default: break
}

Switchのfallthrough

fallthrough構文を使うと、一つ下のcase文を実行します。
Objective-cのbreakを入れ忘れた時と同じ動きです。

// この例だと1と2が出力される
switch 1 {
case 1:
    print(1)
    fallthrough
case 2:
    print(2)
case _:
    print(3)
}