关于带有关联值相等的Swift枚举

它只是从Cocoanetics的一个简单Tweet开始:

有没有更好的办法使带有相关值的枚举相等?

大多数回答都是纯技术性的(但有效的)答案。 简而言之:“ 您应该使用开关,但仍然需要比较所有情况 ”。

好。 但是上面的代码对我来说仍然是错误的,因为他试图使两个不同的情况相等,只是因为它们具有相同的关联值。 在这种情况下, .afterID(42) == .beforeID(42)true ,这可能很危险。

也许不是立即,而是将来,这种特殊性将被忘记,并且开发人员将依赖于常规的Equatable实现,而这两种情况不可能相等。

我们如何通过这两个要求来改进此代码:
•两种不同的情况不能相等。
.afterID(_).beforeID(_)相等的标识符必须易于检查。

一个简单的第一步可能是对案例执行严格的相等性检查,并使用identifier属性比较检查标识符是否相等:

它看起来很棒:

  QF.afterID(42)== QF.beforeID(42)//否 
QF.afterID(42).identifier == QF.beforeID(42).identifier // true \ o /

但是问题在于它可能导致奇怪的结果:

  QF.noFilter.identifier == QF.offset(42).identifier //是 

那么,如何在没有这种奇怪行为的情况下做到这一点呢?