indexOf(Element) 对于 [Foo.Type] 数组不存在



Swift的CollectionType提供了两个indexOf方法:一个直接接受元素,另一个接受谓词函数。如果我有一个类型为[Foo.Type]的数组(对于任何类Foo),前者不存在;只有谓词版本的indexOf。为什么会这样?

接受元素的indexOf方法要求该元素必须符合Equatable协议。它是在一个受约束的协议扩展中定义的,所以它只在约束成立时显示。

元类型(形式为SomeType.Type)本身不能符合协议(从Swift 2.1开始)。因此,即使您可以在全局范围内定义一个对元类型进行操作的==操作符,您实际上也不能使元类型符合Equatable协议。这是一个已知的语言限制。

在某些情况下(例如,当使用类型作为字典中的键时),您可以使用标准库ObjectIdentifier类型来解决此限制。

最新更新