2
我想考枚舉類型的一對夫婦變量的等價,這樣的:我如何可以測試的枚舉情況下,等同與關聯值在斯威夫特4
enum AnEnumeration {
case aSimpleCase
case anotherSimpleCase
case aMoreComplexCase(String)
}
let a1 = AnEnumeration.aSimpleCase
let b1 = AnEnumeration.aSimpleCase
a1 == b1 // Should be true.
let a2 = AnEnumeration.aSimpleCase
let b2 = AnEnumeration.anotherSimpleCase
a2 == b2 // Should be false.
let a3 = AnEnumeration.aMoreComplexCase("Hello")
let b3 = AnEnumeration.aMoreComplexCase("Hello")
a3 == b3 // Should be true.
let a4 = AnEnumeration.aMoreComplexCase("Hello")
let b4 = AnEnumeration.aMoreComplexCase("World")
a3 == b3 // Should be false.
可悲的是,這些都會產生這樣的錯誤像這樣:
error: MyPlayground.playground:7:4: error: binary operator '==' cannot be applied to two 'AnEnumeration' operands
a1 == b1 // Should be true.
~~^~~
MyPlayground.playground:7:4: note: binary operator '==' cannot be synthesized for enums with associated values
a1 == b1 // Should be true.
~~^~~
譯文:如果您的枚舉使用關聯的值,則無法測試它的等效性。
注意:如果刪除了.aMoreComplexCase
(和相應的測試),則代碼將按預期工作。
看起來像過去人們已經決定使用運算符重載來解決這個問題:How to test equality of Swift enums with associated values。但現在我們有了Swift 4,我想知道是否有更好的方法?或者如果有變化導致鏈接解決方案失效?
謝謝!
這些答案仍然有效。當https://github.com/apple/swift-evolution/blob/master/proposals/0185-synthesize-equatable-hashable.md被實現時,它將變得更簡單。 –
這就是我所需要的。我已經讓我的代碼正常工作。也許你應該讓這個評論成爲答案,所以我可以將其標記爲已解決? – MadEmperorYuri