1
鉴于此协议:斯威夫特3:不能调用(协议法)类型的参数列表(通用)
import Foundation
protocol Updatable {
associatedtype E
func updateValuesWith(_ newElement: E)
}
实施这一项目:
private func update<T: NSObject>(_ values: inout [T], with newValues: [T]) where T: Updatable {
guard values.count != 0 else { values = newValues; return }
for newElement in newValues {
let newIndex = newValues.index(of: newElement)
if values.contains(newElement) {
let oldIndex = values.index(of: newElement)
values[oldIndex!].updateValuesWith(newElement) //<--- PROBLEM HERE
if oldIndex != newIndex {
swap(&values[oldIndex!], &values[newIndex!])
}
} else {
values.insert(newElement, at: newIndex!)
}
}
for element in values where values.index(of: element)! > newValues.count {
values.remove(at: values.index(of: element)!)
}
}
我不明白为什么我收到这个错误讯息
不能与类型的参数列表“(T)”
调用“updateValuesWith”预期类型的上线一个参数列表 '(T.E)'
。
经过一番不切实际的研究,我确信我必须错过一些非常基本的东西,但仍然无法弄清楚究竟是什么。
请赐教吗?
好吧我明白了,谢谢你。 'Updatable'是我模型中几个类遵循的协议,它们都有自己的协议方法实现,所以它们都实现了“有用的接口”。这听起来是对的还是有最佳做法,你可以分享? – Herakleis