关于带有关联值相等的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 //是
那么,如何在没有这种奇怪行为的情况下做到这一点呢?