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

亚历克斯·斯塔沃维陶

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

因此,我认为它应该类似于:

extension Array {

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

}

该代码不会生成这样的说法:“无法使用类型为((Element) ''的参数列表来调用“ indexOf ”。我猜想,我们应该以某种方式告诉编译器“ value”参数应符合Equatable协议,但是我该如何指定呢?

埃里克·艾亚(Eric Aya)

您只需要使数组的通用“元素”符合“等于”即可,如下所示:

extension Array where Element: Equatable {

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

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章