0
限制通用类型调用协议方法我有以下:无法由其它协议
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) }
}
}
我希望向Guard
协议分配给任何数目的不同类类型的对象,并且Prisoner
对其他对象的。根据他们的班级类型,充当警卫的对象将会有自己的实现。但我认为没有理由在每个可能继承Guard
的课程中重写smackAll
。所以我试图这样做,但编译器不让我。我错过了什么?
非常感谢你的帮助。我想我试图以不正确的方式使用泛型为我想做的事(我今天只有在他们使用它们时才发现它们)。 – user2320861