使结构可哈希?
Make struct Hashable?
我正在尝试创建 [petInfo : UIImage]()
类型的字典,但出现错误 Type 'petInfo' does not conform to protocol 'Hashable'
。我的 petInfo 结构是这样的:
struct petInfo {
var petName: String
var dbName: String
}
所以我想以某种方式使其可哈希,但其组件的 none 是一个整数,这正是 var hashValue: Int
所需要的。如果它的 none 字段是整数,我怎样才能让它符合协议?如果我知道 dbName
对于此结构的所有出现都是唯一的,我可以使用它吗?
只需 return dbName.hashValue
来自您的 hashValue
函数。仅供参考 - 哈希值不需要是唯一的。要求是两个相等的对象也必须具有相同的哈希值。
struct PetInfo: Hashable {
var petName: String
var dbName: String
var hashValue: Int {
return dbName.hashValue
}
static func == (lhs: PetInfo, rhs: PetInfo) -> Bool {
return lhs.dbName == rhs.dbName && lhs.petName == rhs.petName
}
}
从 Swift 5 开始,var hashValue:Int
已被弃用,取而代之的是 func hash(into hasher: inout Hasher)
(在 Swift 4.2 中引入),因此要更新 @rmaddy 使用的答案:
func hash(into hasher: inout Hasher) {
hasher.combine(dbName)
}
我正在尝试创建 [petInfo : UIImage]()
类型的字典,但出现错误 Type 'petInfo' does not conform to protocol 'Hashable'
。我的 petInfo 结构是这样的:
struct petInfo {
var petName: String
var dbName: String
}
所以我想以某种方式使其可哈希,但其组件的 none 是一个整数,这正是 var hashValue: Int
所需要的。如果它的 none 字段是整数,我怎样才能让它符合协议?如果我知道 dbName
对于此结构的所有出现都是唯一的,我可以使用它吗?
只需 return dbName.hashValue
来自您的 hashValue
函数。仅供参考 - 哈希值不需要是唯一的。要求是两个相等的对象也必须具有相同的哈希值。
struct PetInfo: Hashable {
var petName: String
var dbName: String
var hashValue: Int {
return dbName.hashValue
}
static func == (lhs: PetInfo, rhs: PetInfo) -> Bool {
return lhs.dbName == rhs.dbName && lhs.petName == rhs.petName
}
}
从 Swift 5 开始,var hashValue:Int
已被弃用,取而代之的是 func hash(into hasher: inout Hasher)
(在 Swift 4.2 中引入),因此要更新 @rmaddy 使用的答案:
func hash(into hasher: inout Hasher) {
hasher.combine(dbName)
}