原始值和雜湊值
沒有有效負載的列舉可以具有任何文字型別的原始值 :
enum Rotation: Int {
case up = 0
case left = 90
case upsideDown = 180
case right = 270
}
沒有任何特定型別的列舉不會公開 rawValue 屬性
enum Rotation {
case up
case right
case down
case left
}
let foo = Rotation.up
foo.rawValue //error
假設整數原始值從 0 開始並單調增加:
enum MetasyntacticVariable: Int {
case foo // rawValue is automatically 0
case bar // rawValue is automatically 1
case baz = 7
case quux // rawValue is automatically 8
}
字串原始值可以自動合成:
enum MarsMoon: String {
case phobos // rawValue is automatically "phobos"
case deimos // rawValue is automatically "deimos"
}
原始值列舉自動符合 RawRepresentable 。你可以使用 .rawValue
獲取列舉值的相應原始值:
func rotate(rotation: Rotation) {
let degrees = rotation.rawValue
...
}
你還可以使用 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)")
}
如果你希望獲取特定列舉的雜湊值,則可以訪問其 hashValue,雜湊值將返回從零開始的列舉索引。
let quux = MetasyntacticVariable(rawValue: 8)// rawValue is 8
quux?.hashValue //hashValue is 3