本文へスキップ
BecomeCoder

Swift(iOSアプリ)コース · 第4章 型と関数でモデルを作る · レッスン16

enum ― 決まった選択肢を表す

ブラウザで完結

導入

「信号=赤/青/黄」「通信状態=読み込み中/成功/失敗」。取りうる値が決まっているものは enum(列挙型) で表すと、書き間違いが起きず、switch で漏れなくさばけます。

説明

enumcase で選択肢を並べます。値には .赤 のように短く書けます。

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.sunnyswitch で判定して「晴れ」と print してください。

ヒント1を見る

switch Weather.sunny { case .sunny: ... case .rainy: ... }

ヒント2を見る

.sunny のブロックで print("晴れ")

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

Swift / SwiftUI — ブラウザ内で実行(学習用)

Swiftの教材サブセットを動かす学習用ランナーを読み込みます。ふつうのコードは print の出力を表示し、SwiftUI(struct: View)を書くと右にiPhone風のライブプレビューを描画します(本物のXcode/Swiftコンパイラではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。