Je donne les résultats suivants:ne peut invoquer la méthode de protocole sur le type générique restreint par un autre protocole
protocol Guard {
var prisoners: Array<Prisoner>? { get set }
func smack<T: Prisoner>(prisoner: T)
func smackAll()
}
extension Guard {
final func smackAll() {
prisoners?.forEach() { smack($0) }
//ERROR: "Cannot invoke 'smack' with an argument list of type '(Prisoner)'"
}
}
protocol Prisoner {
var guards: Array<Guard>? { get set }
}
extension Prisoner {
final func incurBeating() {
guards?.forEach() { $0.smack(self) }
}
}
Je souhaite attribuer le protocole Guard
à un certain nombre d'objets de différents types de classes et Prisoner
à d'autres objets . Les objets agissant en tant que gardes auront leurs propres implémentations en fonction de leur type de classe. Mais je ne vois aucune raison de réécrire smackAll
dans chaque classe qui pourrait hériter Guard
. Donc j'essaye de faire comme ça, mais le compilateur ne me laisse pas. Qu'est-ce que je rate?
Merci beaucoup pour votre aide. Je pense que j'essayais d'utiliser les génériques dans le mauvais sens pour ce que je voulais faire (je les ai seulement découvert aujourd'hui quand j'avais un usage pour eux). – user2320861