【发布时间】:2015-09-22 20:42:49
【问题描述】:
将我们的代码库升级到 Swift2 后,我遇到了不寻常的问题。 Set 没有按预期进行减法或联合。
class A: NSObject {
let h: Int
init(h: Int) {
self.h = h
}
override var hashValue: Int {
return h
}
}
func ==(lhs: A, rhs: A) -> Bool {
return lhs.hashValue == rhs.hashValue
}
let a = A(h: 1)
let b = A(h: 1)
var sa = Set([a])
let sb = Set([b])
sa.subtract(sb).count // Swift1.2 prints 0, Swift 2 prints 1
sa.contains(a) // Swift1.2 true, Swift 2 true
sa.contains(b) // Swift1.2 true, Swift 2 false
看起来 new Set 没有使用 hashValue 进行内部操作。知道这是一个错误,还是解决此问题的方法?
【问题讨论】: