我有一个枚举如下
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 有什么问题,或者我在代码中做错了什么。
您似乎将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)