Swift的CollectionType
提供了两个indexOf
方法:一个直接接受元素,另一个接受谓词函数。如果我有一个类型为[Foo.Type]
的数组(对于任何类Foo
),前者不存在;只有谓词版本的indexOf
。为什么会这样?
接受元素的indexOf
方法要求该元素必须符合Equatable
协议。它是在一个受约束的协议扩展中定义的,所以它只在约束成立时显示。
元类型(形式为SomeType.Type
)本身不能符合协议(从Swift 2.1开始)。因此,即使您可以在全局范围内定义一个对元类型进行操作的==操作符,您实际上也不能使元类型符合Equatable
协议。这是一个已知的语言限制。
在某些情况下(例如,当使用类型作为字典中的键时),您可以使用标准库ObjectIdentifier
类型来解决此限制。