“Equatable”无法在扩展程序

时间:2018-05-18 21:28:59

标签: swift swift4 protocol-extension

这有效:

// 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:合成EquatableHashable一致性

     

用户必须在不执行任何要求的情况下将其类型声明为EquatableHashable,以选择自动合成。此一致性必须是原始类型声明的一部分或在同一文件的扩展名中(以确保可以从扩展名访问私有和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)

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

好消息

最近的开发。 2018年6月5日的快照按预期工作:

坏消息

最近发布的版本4.1.2无效。