我创建了一个Set,其中包含一些自定义Struct的实例。该结构符合Equatable和Hashable。当我使用contains函数时,结果不一样。
我知道包含函数基于Equatable的==函数。因此,在这种情况下,如果2个人的ID相同,则contains函数应返回true。但是有时候是真的,有时候是错误的。我理解正确吗?
检查Set是否包含项目的正确方法是什么?
任何帮助都会得到极大的帮助。谢谢。
这是我的代码
struct Person: Equatable, Hashable {
let id: Int
let name: String
static func ==(lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id
}
}
var personSet: Set<Person> = []
let personA = Person(id: 1, name: "Person A")
let personB = Person(id: 1, name: "Person B")
personSet.insert(personA)
print(personSet.contains(personB))