1
Swift的CollectionType
提供了兩個indexOf
方法:一個直接接受元素,另一個接受謂詞函數。如果我有一個[Foo.Type]
類型的數組(對於任何類Foo
),前者不存在;只有indexOf
的謂詞版本。爲什麼是這樣?[Foo.Type]數組不存在indexOf(Element)
Swift的CollectionType
提供了兩個indexOf
方法:一個直接接受元素,另一個接受謂詞函數。如果我有一個[Foo.Type]
類型的數組(對於任何類Foo
),前者不存在;只有indexOf
的謂詞版本。爲什麼是這樣?[Foo.Type]數組不存在indexOf(Element)
採用元素的indexOf
方法要求該元素必須符合Equatable
協議。它在受約束的協議擴展中定義,因此只有在約束條件成立時纔會顯示。
Metatypes(形式爲SomeType.Type
)本身並不符合協議(當前是Swift 2.1)。因此,即使您可以在全局作用域上定義一個運算在元類型上的==運算符,實際上也不會有符合Equatable
協議的元類型。這是一種已知的語言限制。
在某些情況下(例如,在字典中使用類型作爲鍵時),您可以使用標準庫ObjectIdentifier
類型來解決此限制。