hasher.combine(self) 在使用集合时会造成麻烦吗?
will hasher.combine(self) cause trouble while using collections?
使用 hash(into:)
的这种实现会导致问题,尤其是使用集合和数组吗?:
func hash(into hasher: inout Hasher){
hasher.combine(self)
}
我非常确定 hasher.combine(self)
不会编译或导致无限循环。
当hasher.combine()
看到给定的类型时,它将寻找那个对象hash(into:)
函数,该函数将调用具有相同类型的hasher.combine()
,依此类推等等。
你应该做的是
func hash(into hasher: inout Hasher) {
hasher.combine(property1)
hasher.combine(prop2)
//...
//...
//...
//...
//...
//...
//until you have written a line to combine every property you want to hash
}
如果您有任何问题,请告诉我。
您的 Hasher 实现导致错误:
Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeeec79fe8)
这是使类型符合 Hashable
协议的默认方式
/// A point in an x-y coordinate system.
struct GridPoint {
var x: Int
var y: Int
}
extension GridPoint: Hashable {
static func == (lhs: GridPoint, rhs: GridPoint) -> Bool {
return lhs.x == rhs.x && lhs.y == rhs.y
}
func hash(into hasher: inout Hasher) {
hasher.combine(x)
hasher.combine(y)
}
}
使用 hash(into:)
的这种实现会导致问题,尤其是使用集合和数组吗?:
func hash(into hasher: inout Hasher){
hasher.combine(self)
}
我非常确定 hasher.combine(self)
不会编译或导致无限循环。
当hasher.combine()
看到给定的类型时,它将寻找那个对象hash(into:)
函数,该函数将调用具有相同类型的hasher.combine()
,依此类推等等。
你应该做的是
func hash(into hasher: inout Hasher) {
hasher.combine(property1)
hasher.combine(prop2)
//...
//...
//...
//...
//...
//...
//until you have written a line to combine every property you want to hash
}
如果您有任何问题,请告诉我。
您的 Hasher 实现导致错误:
Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeeec79fe8)
这是使类型符合 Hashable
协议的默认方式
/// A point in an x-y coordinate system.
struct GridPoint {
var x: Int
var y: Int
}
extension GridPoint: Hashable {
static func == (lhs: GridPoint, rhs: GridPoint) -> Bool {
return lhs.x == rhs.x && lhs.y == rhs.y
}
func hash(into hasher: inout Hasher) {
hasher.combine(x)
hasher.combine(y)
}
}