假设我有一个结构,其中所有的成员已经Equatable
。
struct S {
let a : String
let b : Int
let c : Double
}
有没有人知道如何在没有手动和宽松地定义S
的情况下自动使==
等同??
答案 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
这就像你能做到的一样短。但它非常简短(一行!),它的含义很明确,并且它可以为您可能添加到您的类型中的未来复杂功能做好准备。快乐!