这有效:
// Conformance to protocol correctly synthesized by compiler
struct MyStruct: Equatable {
}
这不是:
struct MyStruct {
}
// Doesn't work, even though the extension is in the same file
extension MyStruct: Equatable {
}
错误非常明确:
'Equatable'的实现不能在扩展名
中自动合成
我担心的是,根据Swift的提案SE-0185,应该允许这样做:
SE-0185:合成
Equatable
和Hashable
一致性用户必须在不执行任何要求的情况下将其类型声明为
Equatable
或Hashable
,以选择自动合成。此一致性必须是原始类型声明的一部分或在同一文件的扩展名中(以确保可以从扩展名访问私有和fileprivate成员)。
它说这是在Swift 4.1(apple/swift#9619)中实现的。
但是,在尝试编译时,我得到之前显示的错误。我正在使用Ubuntu 16.04,它失败了我得到的这两个版本的swift:
Swift version 4.1-dev (LLVM 260a172ffb, Clang cd84be6c42, Swift 05b1b2be7c)
Swift version 4.2-dev (LLVM d30879863e, Clang 041fd44ebe, Swift b08fb12358)
我错过了什么吗?
答案 0 :(得分:2)