为什么Swift枚举在swift 4.1中返回错误的hashValue?

时间:2018-09-24 09:16:43

标签: ios swift enums swift4.1

我有一个如下的枚举

enum LoginItems: Int {
    case email = 0
    case password
    case login

    static let numberOfItems = LoginItems.login.hashValue + 1
}

以前,在xcode 9.3中,我们使用的是swift 4.0,它曾经提供适当的值,但是现在它给出的值为5364119284923175996,这是完全错误的。有人可以告诉我Swift 4.1的问题是什么,还是我在代码中做错了。

1 个答案:

答案 0 :(得分:2)

您似乎将rawValuehashValue混淆了。

enum LoginItems: Int {
    case email = 0
    case password
    case login

    static let numberOfItems = LoginItems.login.rawValue + 1
}

您的代码将无法在任何版本的Swift中工作。因为rawValuehashValue不同。 Swift 4.2 是一种甚至更好的解决方案,它是CaseIterable协议,可将所有情况作为数组提供。

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

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

print(LoginItems.allCases.count)