我为不同的项目编写了一个数组扩展
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'无法推断swift”
答案 0 :(得分: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
}
}