将等式定义为引用类型的标识?

时间:2016-08-30 03:57:16

标签: swift identity equality reference-type

我经常试图通过将Equatable定义为==来制作我的引用类型===。这允许我引用许多例子来替换详细信息:

collection.contains(where: { $0 === object })

使用:

collection.contains(object)

但我有一种唠叨的感觉,我做错了什么。将等同定义为身份的缺点是什么?这是一种常见的模式吗?

1 个答案:

答案 0 :(得分:1)

将等式定义为标识仅在对象的两个不同表示不可能的情况下才有用。否则,您最终会看到相同的对象,但在进行相等时会失败。

当您保留对象缓存时,这是可以的,确保用单个对象表示相同的实体。

如果规则"一个实体 - 一个对象"在使用相等的所有情况下,例如哈希集,哈希映射和线性搜索,您的对象都会变得无用。