enumは列挙型と呼ばれます。
enum Seasons {
case Spring
case Summer
case Autumn
case Winter
}
のように主にcaseを用いて定義されます。それから、switch式とよく組み合わせて使います。
var myFavorite = Seasons.Spring
switch myFavorite {
case .Spring:
print("どことなく気持ちが浮かれますよね")
case .Summer:
print("何かしなくちゃって気がせきますね")
case .Autumn:
print("旅に出たくなりますよね")
case .Winter:
print("一人が落ち着きますよね")
}
//どことなく気持ちが浮かれますよね
CaseIterableプロトコルに準拠させるとcaseを配列のように扱えます。但しcaseをassociated Valueとするとエラーになります。
enum Seasons: CaseIterable {
case Spring
case Summer
case Autumn
case Winter
}
これはOKですが、caseをassociated Valueにして見ると
enum Seasons: CaseIterable {
case Spring(month: String)
case Summer(month: String)
case Autumn(month: String)
case Winter(month: String)
}
これはエラーになります。しかし、associated ValueでもallCaseを使いたいケースもあります。そんな時はallCaseを具体的な値の配列で定義してあげれば使えます。例えば
enum E干支時刻: CaseIterable {
//associated Value
case eto(kanji: String, yomi: String, startJi: Int, shouJi: Int, endJi: Int)
//CaseIterableプロトコルに準拠させる為
//allCasesをassociated Valueを具体化して定義します。
static var allCases: [E干支時刻] {
return [.eto(kanji: "子", yomi: "ね", startJi: 23, shouJi: 0, endJi: 1),
.eto(kanji: "丑", yomi: "うし", startJi: 1, shouJi: 2, endJi: 3),
.eto(kanji: "寅", yomi: "とら", startJi: 3, shouJi: 4, endJi: 5),
.eto(kanji: "卯", yomi: "う", startJi: 5, shouJi: 6, endJi: 7),
.eto(kanji: "辰", yomi: "たつ", startJi: 7, shouJi: 8, endJi: 9),
.eto(kanji: "巳", yomi: "み", startJi: 9, shouJi: 10, endJi: 11),
.eto(kanji: "午", yomi: "うま", startJi: 11, shouJi: 12, endJi: 13),
.eto(kanji: "未", yomi: "ひつじ", startJi: 13, shouJi: 14, endJi: 15),
.eto(kanji: "申", yomi: "さる", startJi: 15, shouJi: 16, endJi: 17),
.eto(kanji: "酉", yomi: "とり", startJi: 17, shouJi: 18, endJi: 19),
.eto(kanji: "戌", yomi: "いぬ", startJi: 19, shouJi: 20, endJi: 21),
.eto(kanji: "亥", yomi: "い", startJi: 21, shouJi: 22, endJi: 23)]
}
}
こんな感じです。これをforEachで回してみます。
E干支時刻.allCases.forEach { e干支時刻 in
switch e干支時刻 {
case .eto(let kanji, let yomi, let startJi, let shouJi, let endJi):
print("\(kanji)(\(yomi))の刻は \(startJi)時から\(endJi)時です。正\(kanji)は\(shouJi)時です。")
}
}
/*
子(ね)の刻は 23時から1時です。正子は0時です。
丑(うし)の刻は 1時から3時です。正丑は2時です。
寅(とら)の刻は 3時から5時です。正寅は4時です。
卯(う)の刻は 5時から7時です。正卯は6時です。
辰(たつ)の刻は 7時から9時です。正辰は8時です。
巳(み)の刻は 9時から11時です。正巳は10時です。
午(うま)の刻は 11時から13時です。正午は12時です。
未(ひつじ)の刻は 13時から15時です。正未は14時です。
申(さる)の刻は 15時から17時です。正申は16時です。
酉(とり)の刻は 17時から19時です。正酉は18時です。
戌(いぬ)の刻は 19時から21時です。正戌は20時です。
亥(い)の刻は 21時から23時です。正亥は22時です。
*/
こんな感じになります。