在扩展方法中使用数组的类型

时间:2015-10-16 16:05:54

标签: arrays swift set swift2

我要做的是为数组创建一个扩展,以检查所有元素是否都是唯一的。我的计划是创建一个Set并检查Set的计数到Array的计数。但是,我不确定如何将Set的类型绑定到与Array相同的Type。

extension Array {
    func unique() -> Bool {
        var set = Set<self>()
        // Now add all the elements to the set
        return set.count == self.count
    }
} 

1 个答案:

答案 0 :(得分:3)

Array类型定义为

public struct Array<Element>

所以Element是通用占位符,您可以创建 与{/ p>具有相同元素类型的Set

let set = Set<Element>()

但您必须要求数组元素为Hashable

extension Array where Element : Hashable { ... }

(定义泛型类型的扩展方法的可能性 在Swift 2中添加了对类型占位符的限制。)

最后,使用set = Set(self)自动推断设置类型:

extension Array where Element : Hashable {
    func unique() -> Bool {
        let set = Set(self)
        return set.count == self.count
    }
}