SwiftのSwitch文では、ケースとして評価する値を定数や変数で受け取ることができる。

バリューバインディングの使用例

例を見た方がわかりやすいだろう。

let size = (4, 10)

switch size {
case (5...10, 5...10):
    print("規定サイズ内")
case (let width, 5...10):
    print("幅\(width)が規格外")
case (5...10, let height):
    print("高さ\(height)が規格外")
default:
    print("幅高さともに規格外")
}

// 幅4が規格外

タプルを評価するSwitch文だが、6行目と8行目のcase式に見慣れない構文がある。

これは、評価する値を定数として受け取るバリューバインディングという手法で、case式の後のコードで受け取った値を定数や変数として使用することができる。

whereキーワードと組み合わせて条件式を使う

また、バリューバインディングにwhereキーワードを組み合わせて使うことで、値の振り分けに条件式を使うこともできる。

let size = (45, 40, 100)

switch size {
case let (width, height, _) where (width >= 60) || (height >= 60):
    print("規格外:幅高さのどちらかが60以上")
case let (_, _, weight) where (weight >= 80):
    print("規格外:重さが80以上")
default:
    print("規格サイズ内")
}

// 規格外:重さが80以上

上記の例では、最初のcase式でタプルの値をwidth、heightにバインディングし、さらにwhereキーワードでそれぞれの定数を条件式を用いて評価している。

このようにSwiftのSwitch文では、自由度の高い強力な構文を使うことができる。