二元运算符' =='不适用于两个“Equatable”#39;操作数......什么?

时间:2018-03-31 01:09:24

标签: swift xcode protocols equatable

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

enter image description here

2 个答案:

答案 0 :(得分:9)

Element == Equatable替换为Element: Equatable

答案 1 :(得分:1)

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

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

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

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