如何在Swift 4中测试具有关联值的枚举情况的等效性

如何在Swift 4中测试具有关联值的枚举情况的等效性,第1张

概述我想测试几个枚举类型变量的等价性,如下所示: enum AnEnumeration { case aSimpleCase case anotherSimpleCase case aMoreComplexCase(String)}let a1 = AnEnumeration.aSimpleCaselet b1 = AnEnumeration.aSimpleCasea1 == b 我想测试几个枚举类型变量的等价性,如下所示:

enum AnEnumeration {  case aSimpleCase  case anotherSimpleCase  case aMoreComplexCase(String)}let a1 = AnEnumeration.aSimpleCaselet b1 = AnEnumeration.aSimpleCasea1 == b1 // Should be true.let a2 = AnEnumeration.aSimpleCaselet b2 = AnEnumeration.anotherSimpleCasea2 == 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' operandsa1 == b1 // Should be true.~~ ^  ~~MyPlayground.playground:7:4: note: binary operator '==' cannot be synthesized for enums with associated valuesa1 == b1 // Should be true.~~ ^  ~~

翻译:如果您的枚举使用关联值,则无法测试它的等效性.

注意:如果删除了.aMoreComplexCase(和相应的测试),那么代码将按预期工作.

看起来过去人们已经决定使用运算符重载来解决这个问题:How to test equality of Swift enums with associated values.但是现在我们有了Swift 4,我想知道是否有更好的方法?或者,如果有更改使链接的解决方案无效?

谢谢!

解决方法 斯威夫特的提议

> SE-0185 Synthesizing Equatable and Hashable conformance

已被Swift 4.1(Xcode 9.3)接受并实现:

… synthesize conformance to Equatable/Hashable if all of its members are Equatable/Hashable.

因此,它就足够了

… opt-in to automatic synthesis by declaring their type as Equatable or Hashable without implementing any of their requirements.

在你的例子中 – 因为String是Equatable – 它足以声明

enum AnEnumeration: Equatable {  case aSimpleCase  case anotherSimpleCase  case aMoreComplexCase(String)}

并且编译器将合成一个合适的==运算符.

总结

以上是内存溢出为你收集整理的如何在Swift 4中测试具有关联值的枚举情况的等效性全部内容,希望文章能够帮你解决如何在Swift 4中测试具有关联值的枚举情况的等效性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1005737.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存