2016-02-09 86 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 
    } 
}