Donné ce protocole (méthode de protocole):Swift 3: ne peut pas invoquer avec la liste des arguments de type (générique)
import Foundation
protocol Updatable {
associatedtype E
func updateValuesWith(_ newElement: E)
}
Et cette mise en œuvre:
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)!)
}
}
Je ne comprends pas pourquoi je suis obtenir ce message d'erreur
ne peut être invoqué 'updateValuesWith' avec une liste de type d'argument '(T)'
liste attendait à une argument de type '(de T.E)'
en ligne . Après quelques recherches infructueuses, je suis convaincu que je dois manquer quelque chose de très basique mais je n'arrive toujours pas à savoir exactement quoi.
Eclairez-moi s'il vous plaît?
Ok, je comprends maintenant, merci l'homme. 'Updatable' est un protocole dans lequel quelques classes de mon modèle se conforment, elles ont chacune leur propre implémentation de la méthode de protocole afin qu'elles implémentent toutes une" interface utile ". Cela vous semble-t-il correct ou y a-t-il une meilleure pratique à partager? – Herakleis