Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
enum の基本 / case / switch
Swiftの『enum』(列挙型)は、関連する値のグループを型として定義します。Swift の enum は強力で、メソッドやプロパティを持つことができます。
構文
// 基本的な enum の定義
enum 列挙型名 {
case ケース名1
case ケース名2
case ケース名3, ケース名4 // 複数まとめて定義可能
}
// CaseIterable: 全ケースを配列で取得できる
enum 列挙型名: CaseIterable {
case ケース名1
case ケース名2
}
構文一覧
| 構文 | 概要 |
|---|---|
| enum 名前 { case ... } | 列挙型を定義します。 |
| case ケース名 | 列挙型の各ケースを定義します。 |
| switch で網羅的マッチ | enum に対する switch は全ケースを網羅する必要があります。 |
| CaseIterable | 準拠すると allCases プロパティで全ケースの配列を取得できます。 |
| 列挙型.allCases | 全ケースの配列を返します(CaseIterable 準拠が必要)。 |
サンプルコード
// 基本的な enum
enum Direction {
case north
case south
case east
case west
}
// 使い方
var heading = Direction.north
heading = .east // 型が確定していれば省略可能
// switch による網羅的マッチング
switch heading {
case .north:
print("北へ進む")
case .south:
print("南へ進む")
case .east:
print("東へ進む")
case .west:
print("西へ進む")
}
// CaseIterable で全ケースを列挙
enum Season: CaseIterable {
case spring, summer, autumn, winter
}
print("季節の数: \(Season.allCases.count)")
for season in Season.allCases {
print(season)
}
// 比較演算(== / !=)
let day = Direction.north
if day == .north {
print("北方向です")
}
概要
Swiftの『enum』はC言語の列挙型と異なり、単なる整数の別名ではありません。メソッドやプロパティを持つことができ、プロトコルに準拠することもできます。
enum に対して switch を使う場合、コンパイラがすべてのケースを網羅しているかチェックします。新しいケースを追加した際の対処漏れをコンパイル時に検出できます。enum は値型(struct と同様)であり、クラスのような参照渡しにはなりません。
生値(RawValue)を持つ enum についてはenum の RawValue(Int / String)を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。