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