你可以在下图中看到我试图扩展Collection
协议以包含一个名为removingDuplicates
的方法,该方法应该完全按照它所说的去做。编译器显示的错误似乎与Equatable
协议的定义直接相矛盾。这是一个错误还是我误解了什么?
答案 0 :(得分:9)
将Element == Equatable
替换为Element: Equatable
。
答案 1 :(得分:1)
==
函数(所有运算符实际上都是Swift中的函数)是Equatable
协议的要求,这意味着它必须与协议的一些具体实现一起使用。
另一个方面是Collection
是泛型类型,其Element
关联类型最终也需要填充具体类型,而== Equatable
在这里没有帮助。
实际上甚至不可能有一组通用Equatable
值,因为Equatable
是一个具有Self
要求的协议,因此它可以在很多地方直接引用,例如[Equatable]
,其中一个原因是该声明无法满足“集合是同质的”要求,因为您无法在阵列中放置两个完全不相关的类型。
您需要做的是将等级where
子句转换为一致性子句:extension Collection where Element: Equatable
。这减轻了在扩展用户上提供实际实现的负担。并允许您使用Equatable
类型带来的支持。