二元运算符“==”不能应用于两个 'Equatable' 操作数……什么?
Binary operator '==' cannot be applied to two 'Equatable' operands... what?
你可以在下图中看到我试图扩展 Collection
协议以包含一个名为 removingDuplicates
的方法,它应该完全按照它说的去做。编译器显示的错误似乎直接与 Equatable
协议的定义相矛盾。这是一个错误还是我误解了什么?
将 Element == Equatable
替换为 Element: Equatable
。
==
函数(所有运算符实际上都是Swift中的函数)是Equatable
协议的要求,这意味着它必须与协议的一些具体实现一起使用.
另一方面就是Collection
是泛型,它的Element
关联类型最终也需要填充具体类型,== Equatable
也无济于事这里。
实际上甚至不可能有一个通用的Equatable
值的集合,因为Equatable
是一个有Self
要求的协议,因此它可以在很多地方直接引用地方,例如[Equatable]
,原因之一是该声明不能满足 "collections are homogenous" 要求,因为您无法以这种方式在数组中放置两个完全不相关的类型。
您需要做的是将等式 where
子句转换为一致性子句:extension Collection where Element: Equatable
。这将提供实际实现的负担转移到扩展的用户身上。并允许您使用 Equatable
类型带来的支持。
你可以在下图中看到我试图扩展 Collection
协议以包含一个名为 removingDuplicates
的方法,它应该完全按照它说的去做。编译器显示的错误似乎直接与 Equatable
协议的定义相矛盾。这是一个错误还是我误解了什么?
将 Element == Equatable
替换为 Element: Equatable
。
==
函数(所有运算符实际上都是Swift中的函数)是Equatable
协议的要求,这意味着它必须与协议的一些具体实现一起使用.
另一方面就是Collection
是泛型,它的Element
关联类型最终也需要填充具体类型,== Equatable
也无济于事这里。
实际上甚至不可能有一个通用的Equatable
值的集合,因为Equatable
是一个有Self
要求的协议,因此它可以在很多地方直接引用地方,例如[Equatable]
,原因之一是该声明不能满足 "collections are homogenous" 要求,因为您无法以这种方式在数组中放置两个完全不相关的类型。
您需要做的是将等式 where
子句转换为一致性子句:extension Collection where Element: Equatable
。这将提供实际实现的负担转移到扩展的用户身上。并允许您使用 Equatable
类型带来的支持。