【问题标题】:How to fix `Implementation of 'Protocol' cannot be automatically synthesized in an extension`?如何修复“无法在扩展中自动合成“协议”的实现?
【发布时间】:2018-06-08 06:16:11
【问题描述】:

我在向扩展添加新的协议一致性时遇到编译器错误。

struct EquatableStruct { }

extension EquatableStruct: Equatable {
  static func == (lhs: EquatableStruct, rhs: EquatableStruct) -> Bool {
    return true
  }
}

这里出现编译器错误:

Implementation of 'Equatable' cannot be automatically synthesized in an extension

我该如何解决这个问题?

【问题讨论】:

  • 你为什么完全改变了你的问题?它使现有答案毫无意义,并且您更新的代码实际上不会产生您发布的错误。
  • 相同问题不同协议
  • 不,新代码不会导致任何错误。而且你已经让我的答案过时了。
  • 你的答案不是我想要的。我知道Comparable 扩展自Equatable。即使我向Equatable 确认,我也会遇到同样的错误。这里没有错误引用。我需要知道我收到我引用的错误的原因。
  • 您问题中的最新代码没有给出任何错误。我将您的确切代码复制并粘贴到 Xcode 9.4 (Swift 4.1) 游乐场中,在向结构添加一个虚拟属性后它编译得很好。您发布的原始代码确实有问题,并且如我的回答所示已解决。

标签: swift protocols swift-protocols swift-extensions


【解决方案1】:

您错误地引用了错误。应该是:

'Equatable' 的实现不能在扩展中自动合成

Comparable 扩展 Equatable。如果您希望您的扩展符合Comparable,您还必须实现Equatable 协议。

extension ComparableStruct: Comparable {
    static func < (lhs: ComparableStruct, rhs: ComparableStruct) -> Bool {
        return true // FIX
    }

    static func == (lhs: ComparableStruct, rhs: ComparableStruct) -> Bool {
        return true // FIX
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多