通过哈希值访问枚举值?

Arb*_*tur 8 enums swift

枚举有一个名为'hashValue'的属性,它是枚举中的索引.

现在我的问题是,是否可以通过使用数字来访问其值?例如:let variable:AnEnum = 0

Rob*_*ier 14

如果要将枚举值映射到整数,则应直接使用原始值.例如(来自Swift编程语言:枚举):

enum Planet: Int {
    case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}

let possiblePlanet = Planet(rawValue: 7)
Run Code Online (Sandbox Code Playgroud)

我不相信有任何文档承诺枚举的hashValue特别是任何东西(如果你有链接,我会非常感兴趣).如果没有,您应明确指定原始值.

  • 请不要......这实际上是过度的IMO重载枚举,并且可能会在边缘情况下产生许多奇怪的编译器错误.但是如果你装入它,那么实现`static func fromRaw(x:Int) - > AnEnum?`来做你想做的事.`hashValue`什么都不承诺. (3认同)

Ste*_*aul 10

enum Opponent: String {
   case Player
   case Computer

   static func fromHashValue(hashValue: Int) -> Opponent {
       if hashValue == 0 {
           return .Player
       } else {
           return .Computer
       }
   }
Run Code Online (Sandbox Code Playgroud)

}

说明:

由于无法从hashValue中获取枚举值,因此必须手动执行.它不漂亮,但它的工作原理.您实际上创建了一个函数,允许您传入所需值的索引并手动将该枚举值返回给调用者.这可能会因为一个包含大量案例的枚举而变得令人讨厌,但它对我来说就像一个魅力.