導入
「信号=赤/青/黄」「通信状態=読み込み中/成功/失敗」。取りうる値が決まっているものは enum(列挙型) で表すと、書き間違いが起きず、switch で漏れなくさばけます。
説明
enum に case で選択肢を並べます。値には .赤 のように短く書けます。
enum Direction {
case north, south, east, west
}
let heading = Direction.north
switch heading {
case .north: print("北へ")
case .south: print("南へ")
case .east: print("東へ")
case .west: print("西へ")
}
enumにはメソッドや計算プロパティも持たせられます。
enum Signal {
case red, green, yellow
var meaning: String {
switch self {
case .red: return "止まれ"
case .green: return "進め"
case .yellow: return "注意"
}
}
}
print(Signal.red.meaning) // 止まれ
case に値を紐づける 関連値 も使えます。「成功なら文字列、失敗ならコード」のように、状態と付随データをセットで表せます。
enum Result {
case success(String)
case failure(Int)
}
let res = Result.failure(404)
switch res {
case .success(let msg): print("成功: \(msg)")
case .failure(let code): print("失敗: \(code)")
}
やってみよう
heading を別の方向に変えて、switch の出力が変わるのを確かめましょう。Signal の別のケースの meaning も表示してみてください。
演習
enum Weather { case sunny, rainy } を作り、Weather.sunny を switch で判定して「晴れ」と print してください。
ヒント1を見る
switch Weather.sunny { case .sunny: ... case .rainy: ... }
ヒント2を見る
.sunny のブロックで print("晴れ")。