Swift 的 CollectionType
提供了两种 indexOf
方法:一种直接获取元素,另一种获取谓词函数。如果我有一个类型为 [Foo.Type]
的数组(对于任何类 Foo
),前者不存在;只有 indexOf
的谓词版本。这是为什么?
最佳答案
采用元素的indexOf
方法要求该元素必须符合Equatable
协议(protocol)。它是在受约束的协议(protocol)扩展中定义的,因此它仅在该约束成立时显示。
元类型(形式为 SomeType.Type
)本身不能符合协议(protocol)(当前为 Swift 2.1)。因此,即使您可以在全局范围内定义对元类型进行操作的 == 运算符,您实际上也无法使元类型符合 Equatable
协议(protocol)。这是一个已知的语言限制。
在某些情况下(例如,将类型用作字典中的键时)您可以使用标准库 ObjectIdentifier
键入以解决此限制。
关于swift - [Foo.Type] 数组不存在 indexOf(Element),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32854219/