2016-02-09 122 views
4

我有寫不同的項目泛型參數無法推斷迅速

extension Array { 
    func distinct<T: Equatable>() -> [T]{ 
     var unique = [T]() 
     for i in self{ 
      if let item = i as? T { 
       if !unique.contains(item){ 
        unique.append(item) 
       } 
      } 
     } 
     return unique 
    } 
} 

陣列延伸和嘗試調用這個函數像下面

let words = ["pen", "Book", "pencile", "paper", "Pin", "Colour Pencile", "Marker"] 
words.distinct() 

但它給錯誤「泛型參數「T '不能被推斷得很快「

+0

看一看http://stackoverflow.com/questions/24091046/unable-to -use-contains-a-swift-array-extension ... –

回答

14

你可以通過告訴編譯器你的期望來擺脫這個錯誤:

let a: [String] = words.distinct() 

問題是編譯器不知道泛型T是什麼。 更好的解決辦法是告訴你定義不同的功能,所有的數組的編譯器,他們的元素是Equatable:

extension Array where Element : Equatable { 
    func distinct() -> [Element]{ 
     var unique = [Element]() 
     for i in self{ 
      if let item = i as? Element { 
       if !unique.contains(item){ 
        unique.append(item) 
       } 
      } 
     } 
     return unique 
    } 
}