2015-09-29 33 views
1

Swift的CollectionType提供了兩個indexOf方法:一個直接接受元素,另一個接受謂詞函數。如果我有一個[Foo.Type]類型的數組(對於任何類Foo),前者不存在;只有indexOf的謂詞版本。爲什麼是這樣?[Foo.Type]數組不存在indexOf(Element)

回答

3

採用元素的indexOf方法要求該元素必須符合Equatable協議。它在受約束的協議擴展中定義,因此只有在約束條件成立時纔會顯示。

Metatypes(形式爲SomeType.Type)本身並不符合協議(當前是Swift 2.1)。因此,即使您可以在全局作用域上定義一個運算在元類型上的==運算符,實際上也不會有符合Equatable協議的元類型。這是一種已知的語言限制。

在某些情況下(例如,在字典中使用類型作爲鍵時),您可以使用標準庫ObjectIdentifier類型來解決此限制。