Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
enum の RawValue(Int / String)
Swiftの enum は生値(RawValue)を持つことができます。各ケースに整数や文字列などの値を関連付けることで、外部のデータと enum を相互変換できます。
構文
// Int の RawValue
enum 列挙型名: Int {
case ケース1 = 1
case ケース2 = 2
case ケース3 // 自動的に 3
}
// String の RawValue
enum 列挙型名: String {
case ケース1 = "値1"
case ケース2 // ケース名がそのまま生値になる
}
// RawValue から enum を生成(失敗可能イニシャライザ)
let value = 列挙型名(rawValue: 1) // Optional<列挙型名>
プロパティ・メソッド一覧
| プロパティ / メソッド | 概要 |
|---|---|
| ケース.rawValue | ケースに対応する生値を返します。 |
| init(rawValue:) | 生値から enum を生成します。対応するケースがなければ nil を返します。 |
サンプルコード
// Int RawValue
enum Month: Int {
case january = 1, february, march, april
case may, june, july, august
case september, october, november, december
}
// rawValue の取得
print("3月の値: \(Month.march.rawValue)") // 3
print("12月の値: \(Month.december.rawValue)") // 12
// rawValue から enum を生成
if let month = Month(rawValue: 7) {
print("7番目の月: \(month)")
}
// 存在しない値の場合は nil
let invalid = Month(rawValue: 13)
print("13番目: \(invalid as Any)")
// String RawValue
enum Planet: String {
case mercury = "水星"
case venus = "金星"
case earth = "地球"
case mars = "火星"
}
print(Planet.earth.rawValue) // 地球
// ケース名がそのまま生値になるケース
enum Color: String, CaseIterable {
case red, green, blue
}
for color in Color.allCases {
print("\(color) → \(color.rawValue)")
}
概要
生値(RawValue)を持つ enum は、データベースの整数コードや API の文字列コードと enum を相互変換するのに便利です。Int の生値は指定がなければ前のケースの値 +1 が自動的に設定されます。
『init(rawValue:)』は失敗可能イニシャライザであり、対応するケースが存在しない場合は nil を返します。rawValue への対応がない値を強制アンラップすると実行時クラッシュになります。
関連値(Associated Values)を持つ enum についてはenum の Associated Valuesを参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。