我经常试图通过将 ==
定义为 ===
来使我的引用类型 Equatable
。这允许我举一个例子来代替冗长的:
collection.contains(where: { $0 === object })
与:
collection.contains(object)
但我总觉得自己做错了什么™。将平等定义为身份有什么缺点?这是一种常见的模式吗?
最佳答案
将相等性定义为同一性仅在不可能对一个对象进行两种不同表示的情况下才有用。否则,您最终会得到看起来相同的对象,但在进行相等性比较时会失败。
当您保留对象缓存时,这是可以的,确保相同的实体由单个对象表示。
如果“一个实体 - 一个对象”的规则被打破,您的对象在所有使用相等性的情况下都会变得无用,例如哈希集、 HashMap 和线性搜索。
关于swift - 将相等性定义为引用类型的标识?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39218533/