代码之家  ›  专栏  ›  技术社区  ›  jeremyabannister

二进制运算符“==”不能应用于两个“可等分”操作数。。。什么

  •  -1
  • jeremyabannister  · 技术社区  · 6 年前

    你可以在下面的图片中看到,我试图扩展 Collection 协议包含一个名为 removingDuplicates ,它应该完全按照它所说的去做。编译器显示的错误似乎与 Equatable 协议这是一个bug还是我误解了什么?

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  9
  •   Ole Begemann    6 年前

    代替 Element == Equatable 具有 Element: Equatable .

        2
  •  2
  •   Cristik    6 年前

    这个 == 函数(所有运算符实际上都是Swift中的函数)是 Equatable 协议,这意味着它必须与协议的一些具体实现一起使用。

    另一个方面是 Collection 是泛型类型 Element 相关类型最终也需要用混凝土类型填充,以及 == Equatable 在这里没有帮助。

    实际上,甚至不可能有一个泛型 均衡的 值,如 均衡的 是一个协议 Self 需求,因此它可以在许多地方直接引用,例如。 [Equatable] ,其中一个原因是,该声明不能满足“集合是同质的”要求,因为您可以这样在数组中放置两个完全不相关的类型。

    你需要做的是改变平等 where 合规性条款: extension Collection where Element: Equatable . 这减轻了扩展用户提供实际实现的负担。并允许您使用 均衡的 类型