Beachten Sie Folgendes:Swift Property Observer in Protokollerweiterung?
protocol ViewControllable: class {
typealias VM: ViewModellable
var vm: VM! { get }
func bind()
}
extension ViewControllable {
var vm: VM! {
didSet {
bind()
}
}
}
Ich versuche vm
Eigentum zu beobachten und bind
nennen, wenn es injiziert wird. Aber dies nicht kompiliert mit Fehler Spruch:
Erweiterungen können nicht gespeichert Eigenschaften enthalten
was Sinn macht, da Protokoll kann nicht Eigenschaften erzwingen stored
oder computed
sein.
Ist dies möglich, ohne Einführung class inheritance
?
Mit anderen Worten, Kann ich die Änderung einer Eigenschaft innerhalb der Protokollerweiterung beobachten?
Beachten Sie, dass Sie dies sehr einfach tun können, wenn Sie eine zugeordnete Eigenschaft * verwenden. Hier ist ein neuer Post von mir über genau, wie man eine verbundene Eigenschaft herstellt: [Beispiel] (http://stackoverflow.com/documentation/swift/1085/associated-objects/27656/property-in-a-protocol-extension-achieved -using-associated-object # t = 20170128181236289743) Das ist ziemlich frisch, als dies geschrieben wurde, also hoffentlich ist es ziemlich stabil. – Fattie
In Bezug auf diese Frage ist ein Beispiel für die Verwendung dieses Beispiels das Beispiel, das in dieser QA verwendet wird: http://stackoverflow.com/questions/41910120/in-swift3-combine-respryststo-and-calling-in-one- Sturzflug – Fattie