Swift Set包含具有相同代码的函数返回不稳定

时间:2019-06-17 04:42:49

标签: swift collections set hashable

我创建了一个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))

0 个答案:

没有答案