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