Enums without payloads can have raw values of any literal type:
enum Rotation: Int {
case up = 0
case left = 90
case upsideDown = 180
case right = 270
}
Enums without any specific type do not expose the rawValue property
enum Rotation {
case up
case right
case down
case left
}
let foo = Rotation.up
foo.rawValue //error
Integer raw values are assumed to start at 0 and increase monotonically:
enum MetasyntacticVariable: Int {
case foo // rawValue is automatically 0
case bar // rawValue is automatically 1
case baz = 7
case quux // rawValue is automatically 8
}
String raw values can be synthesized automatically:
enum MarsMoon: String {
case phobos // rawValue is automatically "phobos"
case deimos // rawValue is automatically "deimos"
}
A raw-valued enum automatically conforms to RawRepresentable. You can get an enum value's corresponding raw value with .rawValue
:
func rotate(rotation: Rotation) {
let degrees = rotation.rawValue
...
}
You can also create an enum from a raw value using init?(rawValue:)
:
let rotation = Rotation(rawValue: 0) // returns Rotation.Up
let otherRotation = Rotation(rawValue: 45) // returns nil (there is no Rotation with rawValue 45)
if let moon = MarsMoon(rawValue: str) {
print("Mars has a moon named \(str)")
} else {
print("Mars doesn't have a moon named \(str)")
}
If you wish to get the hash value of a specific enum you can access its hashValue, The hash value will return the index of the enum starting from zero.
let quux = MetasyntacticVariable(rawValue: 8)// rawValue is 8
quux?.hashValue //hashValue is 3