代码之家  ›  专栏  ›  技术社区  ›  Shreesha Kedlaya

为什么swift枚举在swift 4.1中返回错误的hashValue?[复制]

  •  -1
  • Shreesha Kedlaya  · 技术社区  · 7 年前

    enum LoginItems: Int {
        case email = 0
        case password
        case login
    
        static let numberOfItems = LoginItems.login.hashValue + 1
    }
    

    以前在Xcode9.3中,我们使用的是swift4.0,它曾经给出正确的值,但是现在它给出的值是 5364119284923175996 这是完全错误的。有人能告诉我swift 4.1有什么问题吗?还是我在代码中做了什么错误。

    1 回复  |  直到 7 年前
        1
  •  2
  •   vacawama    7 年前

    你好像有 困惑的 rawValue 具有 hashValue

    enum LoginItems: Int {
        case email = 0
        case password
        case login
    
        static let numberOfItems = LoginItems.login.rawValue + 1
    }
    

    你的代码在 任何 Swift版本。因为 哈希值 更好的解决方案 已经进来了 Swift 4.2银行代码 是什么 CaseIterable

    enum LoginItems: CaseIterable {
        case email
        case password
        case login
    }
    

    在这种情况下,您甚至不需要静态变量。

    print(LoginItems.allCases.count)