我经常试图通过将Equatable
定义为==
来制作我的引用类型===
。这允许我引用许多例子来替换详细信息:
collection.contains(where: { $0 === object })
使用:
collection.contains(object)
但我有一种唠叨的感觉,我做错了什么。将等同定义为身份的缺点是什么?这是一种常见的模式吗?
答案 0 :(得分:1)
将等式定义为标识仅在对象的两个不同表示不可能的情况下才有用。否则,您最终会看到相同的对象,但在进行相等时会失败。
当您保留对象缓存时,这是可以的,确保用单个对象表示相同的实体。
如果规则"一个实体 - 一个对象"在使用相等的所有情况下,例如哈希集,哈希映射和线性搜索,您的对象都会变得无用。