通用参数无法快速推断

时间:2016-02-09 10:45:59

标签: ios swift generics

我为不同的项目编写了一个数组扩展

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”

1 个答案:

答案 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
    }
}