私は次のものを持っています:
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
ます。ガードとして機能するオブジェクトは、クラス タイプに応じて、独自のスマック実装を持ちます。smackAll
しかし、継承する可能性のある各クラスを書き直す理由はありませんGuard
。だから私はこのようにしようとしていますが、コンパイラは私を許しません。私は何が欠けていますか?