我正在尝试为Swift中的Array实现一个简单的扩展函数,该函数将“切换”元素—如果该值已经在Array中,则应将其删除;如果没有该值,则应将其添加到数组中。
因此,我认为它应该类似于:
extension Array {
mutating func toggle(value: Element) {
if let index = indexOf(value) {
removeAtIndex(index)
} else {
append(value)
}
}
}
该代码不会生成这样的说法:“无法使用类型为((Element) ''的参数列表来调用“ indexOf ”。)。我猜想,我们应该以某种方式告诉编译器“ value”参数应符合Equatable协议,但是我该如何指定呢?
您只需要使数组的通用“元素”符合“等于”即可,如下所示:
extension Array where Element: Equatable {
mutating func toggle(value: Element) {
if let index = indexOf(value) {
removeAtIndex(index)
} else {
append(value)
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句