Associated Values でのバーコードの例は、異なる型の関連値を保持する列挙型のケースを宣言する方法について示しています。関連値に代わる方法として、列挙型のケースにすべて同じ型のデフォルト値(raw 値)をあらかじめ持たせることができます。
次の例では、列挙型のケース名と一緒に ASCII の raw 値を保持しています。
enum ASCIIControlCharacter: Character {
case Tab = "\t"
case LineFeed = "\n"
case CarriageReturn = "\r"
}
この例では、列挙型 ASCIIControlCharacter
の raw 値が Character
型で定義されていて、より一般的な ASCII 制御文字で設定されています。Character
値については、Strings and Characters で説明されています。
raw 値は文字列や文字、あるいは整数や浮動小数点数の型にすることができます。各 raw 値を列挙型の宣言内でユニークにする必要があります。
暗黙のうちに割り当てられる raw 値
整数または文字列の raw 値を保持する列挙型を扱っているとき、各ケースに対して明示的に raw 値を割り当てる必要はありません。割り当てない場合、Swift が自動的に値を割り当てます。
例えば、raw 値に整数が使用されている場合、各ケースの暗黙値は直前のケースより 1 多い値になります。最初のケースに値が設定されていない場合には、最初の値は 0
になります。
次の列挙型は、前に見た列挙型 Planet
の改良版で、太陽からの惑星の順番を表す整数の raw 値が割り当てられています。
enum Planet: Int {
case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
この例では、Planet.Mercury
が明示的な raw 値 1
で、Planet.Venus
が暗黙的な raw 値 2
などと続きます。
raw 値に文字列が使用された場合には、各ケースの暗黙値はケース名のテキストになります。
次の列挙型は、前に見た列挙型 CompassPoint
の改良版で、各方角の名称を表す文字列の raw 値が割り当てられます。
enum CompassPoint: String {
case North, South, East, West
}
この例では、CompassPoint.South
の暗黙的な raw 値は "South"
となります。
rawValue
プロパティを利用して列挙型のケースの raw 値にアクセスします。
let earthsOrder = Planet.Earth.rawValue
// earthsOrder は 3
let sunsetDirection = CompassPoint.West.rawValue
// sunsetDirection は "West"
raw 値から初期化
raw-value 型で列挙型を定義する場合、列挙型は自動的に(パラメータ rawValue
として)raw 値の型の値を受け取り、列挙型の case か nil
を返すイニシャライザを受け取ります。列挙型の新しいインスタンスを生成するために、このイニシャライザを使用することができます。
次の例では、raw 値の 7
から、Uranus と特定されます。
let possiblePlanet = Planet(rawValue: 7)
// possiblePlanet は Planet? 型の Planet.Uranus
あらゆる Int
値に対応する惑星があるわけではないため、raw 値のイニシャライザは常にオプショナルな列挙型のケースを返します。この例では、possiblePlanet
は Planet?
(オプショナル Planet
)型になります。
ポジション 9
の惑星を見つけようとした場合、raw 値のイニシャライザが返すオプショナル Planet
値は nil
になります。
let positionToFind = 9
if let somePlanet = Planet(rawValue: positionToFind) {
switch somePlanet {
case .Earth:
print("Mostly harmless")
default:
print("Not a safe place for humans")
}
} else {
print("There isn't a planet at position \(positionToFind)")
}
// "There isn't a planet at position 9" と出力
この例では、raw 値 9
の惑星にアクセスするために、オプショナルバインディングを使用しています。if let somePlanet = Planet(rawValue: 9)
の文はオプショナル Planet
を生成し、取得できた場合にはそのオプショナル Planet
の値を somePlanet
に設定しています。このケースでは、ポジション 9
の惑星を取得することはできないため、代わりに else
側の分岐が実行されます。
Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.