Si consideri il seguente:Osservatore di proprietà Swift nell'estensione del protocollo?
protocol ViewControllable: class {
typealias VM: ViewModellable
var vm: VM! { get }
func bind()
}
extension ViewControllable {
var vm: VM! {
didSet {
bind()
}
}
}
sto cercando di osservare vm
proprietà e chiamare bind
ogni volta che viene iniettato. Ma questo non compila con detto errore:
estensioni non possono contenere proprietà memorizzate
che ha senso dal momento che il protocollo non può far rispettare le proprietà di essere stored
o computed
.
È possibile eseguire questa operazione senza introdurre class inheritance
?
In altre parole, È possibile osservare la modifica di una proprietà all'interno dell'estensione del protocollo?
nota che è possibile farlo facilmente, * se si utilizza una proprietà associata *. Ecco un post recente su di me su come creare una proprietà associata: [esempio] (http://stackoverflow.com/documentation/swift/1085/associated-objects/27656/property-in-a-protocol-extension-achieved -using-associated-object # t = 20170128181236289743) Questo è abbastanza fresco mentre scrivo questo, quindi spero che sia abbastanza stabile. – Fattie
Per quanto riguarda questa domanda, un esempio perfetto di dove si potrebbe usare questo è l'esempio utilizzato in questo QA: http://stackoverflow.com/questions/41910120/in-swift3-combine-respondsto-and-calling-in-one- fell-swoop – Fattie