【发布时间】:2018-06-06 21:35:22
【问题描述】:
这行得通:
// 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来选择加入自动综合,而无需实现他们的任何要求。这种一致性必须是原始类型声明的一部分或在同一文件的扩展中(以确保可以从扩展访问私有和文件私有成员)。
它说这是在 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)
我错过了什么吗?
【问题讨论】:
-
在我看来是个错误。
-
可能是this issue。
-
...这是关于2 weeks ago的实现。
-
这是 swift 中的一个错误并记录在 here.
标签: swift swift4 protocol-extension