用途
主に値をグループ化するのに使用します。
enum Size {
case S, M, L
}
// または
enum Size {
case S
case M
case L
}
var size = Size.S
if (size == Size.S) {
print("Sサイズ")
}
// 型推論で.Sだけでもいけます
if (size == .S) {
print("Sサイズ")
}
※ Intの場合、設定値を省略すると、0, 1, 2... という連番が自動的に割り振られる。1から始めると、同じように2, 3, 4...という数値が自動で割り振られる。
Raw Valueを参照するには、rawValue を使用します。
var size = Size.S
if (size.rawValue == 1) {
print("Sサイズ")
}
関数を定義する
enum Size {
case S, M, L
func sizeToString() {
switch self {
case .S:
print("Sサイズ")
case .M:
print("Mサイズ")
case .L:
print("Lサイズ")
default:
break
}
}
}
var size = Size.S
size.sizeToString() // => "Sサイズ"
rawValue から case を求める
enum Size: Int {
case S = 0, M, L
func sizeToString() {
switch self {
case .S:
print("Sサイズ")
case .M:
print("Mサイズ")
case .L:
print("Lサイズ")
default:
break
}
}
}
let section = Size(rawValue: 0)!
print(section) // S
コンストラクタを定義する
init メソッド(nilになる場合は init? メソッド)によってコンストラクタを定義することができます。
enum Size: CaseIterable {
case S
case M
case L
init?(price: Int) {
if price == 100 {
self = .S
} else if price == 200 {
self = .M
} else if price == 300 {
self = .L
} else {
return nil
}
}
}
print(Size(price: 100)) => Optional(Size.S)
caseに引数を定義する
case をさらに細かい粒度に分けたい場合などは便利です。
enum Size {
case S(price: Int)
case M(price: Int)
case L(price: Int)
func string() -> String {
switch self {
case .S(let price): return "Sサイズ: \(price)円"
case .M(let price): return "Mサイズ: \(price)円"
case .L(let price): return "Lサイズ: \(price)円"
}
}
}
let a = Size.S(price: 100)
print(a.string()) => Sサイズ: 100円
CaseIterable
enum のすべての case を allCases メソッドにより配列で取得することができます。
enum Size: CaseIterable {
case S
case M
case L
}
print(Size.allCases) => [Size.S, Size.M, Size.L]
当社で開発した予定とタスクを同時に管理できるiOSアプリ「My Schedule - マイスケジュール -」をリリースしました。ダウンロード&評価のほどよろしくお願いいたします。