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文では、自由度の高い強力な構文を使うことができる。