我可以自动导出像Equatable这样的实例吗?

时间:2015-06-01 01:48:49

标签: swift

假设我有一个结构,其中所有的成员已经Equatable

struct S {
  let a : String
  let b : Int
  let c : Double
}

有没有人知道如何在没有手动和宽松地定义S的情况下自动使==等同??

2 个答案:

答案 0 :(得分:4)

在Swift 4.1中,如果所有类型的成员都符合协议,则类型现在将合成{ *genMethod() {} }Equatable的一致性。

如果所有类型的属性都是Hashable,只需将Struct定义为Equatable,并合成所需的相等方法。

Equatable
  

提案:SE-0185
  状态:已实施(Swift 4.1)

     

开发人员必须编写大量的样板代码来支持复杂类型的兼容性和可靠性。此提议为编译器提供了一种方法,可以自动合成struct S: Equatable { let a : String let b : Int let c : Double } Equatable的一致性,以减少此样板,在已知可生成正确实现的方案的子集中。

     

https://github.com/apple/swift-evolution/blob/master/proposals/0185-synthesize-equatable-hashable.md

答案 1 :(得分:0)

不,您必须手动定义它:

[1] 0.08 0.19 0.11

这就像你能做到的一样短。但它非常简短(一行!),它的含义很明确,并且它可以为您可能添加到您的类型中的未来复杂功能做好准备。快乐!