ざっくりん雑記

プログラミングで忘れそうなことをひたすらメモる

Swift - switch文

Swiftでのswitch文の書き方

オーソドックスな書き方

let signalColor = "green"
switch signalColor {
case "green":
    print("通過しても良いです")
case "yellow":
    print("停止できるなら停止してください")
case "red":
    print("停止してください")
default:
    print("判定不能")
}
通過しても良いです

レンジ演算子を使った判定

for i in 1...20 {
    switch i {
    case (1...5):
        print("...")
    case (5...10):
        print(".........")
    case (10...15):
        print("................")
    default:
        print("default")
    }
}
...
...
...
...
...
.........
.........
.........
.........
.........
................
................
................
................
................
default
default
default
default
default

タプルを利用したswitch

let imageSize = (1080, 1920)
switch imageSize {
case (0, 0):
    print("幅, 高さともに0です")
case (320, 480):
    print("iPhone 3G世代")
case (1080, 1920):
    print("iPhone 6世代以降")
default:
    print("判定できませんでした")
}
iPhone 6世代以降

バリューバインディング

かっこいい響き。

let resolutionSize = (1080, 100)
switch resolutionSize {
case (0, 0):
    print("幅, 高さともに0です")
case (320, 480):
    print("iPhone 3G世代")
case (1080, let height):
    print("高さが規格外:\(height)")
case (let width, 1980):
    print("幅が規格外:\(width)")
case (1080, 1920):
    print("iPhone 6世代以降")
default:
    print("判定できませんでした")
}
高さが規格外:100

caseの条件式において値を使用する

let physicalInfo = (180, 80, 30) // 身長, 体重, 年齢
switch physicalInfo {
case let (height, weight, _) where (height >= 120) || (weight <= 100):
    print("体重が低すぎるか, 体重が重すぎるため, 乗れません")
case let (_, _, age) where (age >= 12):
    print("12歳以上でなければ, 乗れません")
default:
    print("乗れます")
}
体重が低すぎるか, 体重が重すぎるため, 乗れません

default を省略する

バリューバインディングを用いることで、かならず当てはまる条件式を書いた場合は、defaultを省略できる。

let point = (10,100)
switch point {
case (0, 0):
    print("中心点")
case (0, _):
    print("x軸上にある点")
case (_, 0):
    print("y軸上にある点")
case let(x, y):
    print("(\(x),\(y))")
}
(10,100)

参考