我正在尝试为Swift中的Array实现一个简单的扩展函数,它将“切换”元素 - 如果值已经在Array中,则应该将其删除,如果没有这样的值,则应该将其添加到数组。
所以我认为它应该看起来像:
extension Array {
mutating func toggle(value: Element) {
if let index = indexOf(value) {
removeAtIndex(index)
} else {
append(value)
}
}
}
此代码不构建说:“无法使用类型为”(元素)“的参数列表调用” indexOf “ ”。我想,我们应该以某种方式告诉编译器“值”参数应符合Equatable协议,但我该如何指定?
答案 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)
}
}
}