Lassen Sie uns sagen, ich habe sehr einfache Klasse:für Klasse
class Box<T> {
var boxedObject:T
init(object: T) {
self.boxedObject = object
}
}
Was möchte ich jetzt zu erreichen, ist Delegaten hinzuzufügen, die mir diesen Wert in Feld informieren hat sich geändert:
protocol BoxDelegate<T>: class {
func valueInBoxChanged(box: Box<T>) -> Void
}
class Box<T> {
var boxedObject: T {
didSet {
self.delegate?.valueInBoxChanged(self)
}
}
weak var delegate: BoxDelegate<T>?
init(object: T) {
self.boxedObject = object
}
}
Dieser Code funktioniert natürlich nicht, da wir keine generischen Delegaten haben. Ich kann Delegat zu einer Struktur mit Schließung machen, aber es ist eine hässliche Lösung. Wie sollte ich solche Dinge in Swift machen?
In diesem speziellen Fall, wo der Delegat nur eine Methode implementiert, würde ich vorschlagen, einfach die generische Typ-Deklaration auf die Methode selbst zu verschieben. Natürlich wäre das unelegant, wenn das Protokoll mehrere Methoden deklariert, aber in diesem einfachen Fall ist es ziemlich dasselbe –