为什么 swift 枚举在 swift 4.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 有什么问题,或者我在代码中做错了什么。

您似乎将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)

相关内容

  • 没有找到相关文章

最新更新