【问题标题】:Binary operator '==' cannot be applied to two 'Equatable' operands... what?二元运算符'=='不能应用于两个'Equatable'操作数......什么?
【发布时间】:2018-03-31 12:02:25
【问题描述】:

您可以在下图中看到,我试图扩展 Collection 协议以包含一个名为 removingDuplicates 的方法,它应该完全按照它所说的那样做。编译器显示的错误似乎直接与Equatable 协议的定义相矛盾。这是一个错误还是我误解了什么?

【问题讨论】:

标签: swift xcode protocols equatable


【解决方案1】:

Element == Equatable 替换为Element: Equatable

【讨论】:

    【解决方案2】:

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

    另一方面是Collection 是一个泛型类型,它的Element 关联类型最终也需要填充一个具体类型,而== Equatable 在这里没有帮助。

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

    您需要做的是将等式where 子句转换为一致性子句:extension Collection where Element: Equatable。这将提供实际实现的负担转移到扩展的用户身上。并且允许你使用Equatable类型带来的支持。

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 2015-09-01
      • 2017-11-22
      • 2018-06-23
      • 2023-03-10
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多