我有一个如下的枚举
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的问题是什么,还是我在代码中做错了。
答案 0 :(得分:2)
您似乎将rawValue
与hashValue
混淆了。
enum LoginItems: Int {
case email = 0
case password
case login
static let numberOfItems = LoginItems.login.rawValue + 1
}
您的代码将无法在任何版本的Swift中工作。因为rawValue
与hashValue
不同。 Swift 4.2 是一种甚至更好的解决方案,它是CaseIterable
协议,可将所有情况作为数组提供。
enum LoginItems: CaseIterable {
case email
case password
case login
}
在这种情况下,您甚至不需要静态变量。
print(LoginItems.allCases.count)