以任何对象作为参数的Swift数组的扩展函数

时间:2015-10-06 09:59:10

标签: arrays swift generics swift2

我正在尝试为Swift中的Array实现一个简单的扩展函数,它将“切换”元素 - 如果值已经在Array中,则应该将其删除,如果没有这样的值,则应该将其添加到数组。

所以我认为它应该看起来像:

extension Array {

    mutating func toggle(value: Element) {
        if let index = indexOf(value) {
            removeAtIndex(index)
        } else {
            append(value)
        }
    }

}

此代码不构建说:“无法使用类型为”(元素)“的参数列表调用” indexOf ”。我想,我们应该以某种方式告诉编译器“值”参数应符合Equatable协议,但我该如何指定?

1 个答案:

答案 0 :(得分:2)

你只需要使Array的通用“Element”符合“Equatable”,如下所示:

extension Array where Element: Equatable {

    mutating func toggle(value: Element) {
        if let index = indexOf(value) {
            removeAtIndex(index)
        } else {
            append(value)
        }
    }

}