Sto provando ad adottare ReactiveCocoa nella mia applicazione iOS scritta in Swift. Sfortunatamente, sembra che rac_valuesForKeyPath non funzioni come previsto. Ecco l'esempio:ReactiveCocoa rac_valuesForKeyPath non funziona in Swift
class Source: NSObject {
var observable: String = "<Original>"
override init() {
super.init()
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), {() -> Void in
self.observable = "<Updated>"
println("Updated value to \(self.observable)");
})
}
}
class Observer: NSObject {
init(source: Source) {
super.init()
source.rac_valuesForKeyPath("observable", observer: self).subscribeNext { (value: AnyObject!) -> Void in
println(">>> Observable value changed: \(value)")
}
}
}
L'esempio produce il seguente output:
>>> Observable value changed: <Original>
Updated value to <Updated>
Ciò significa blocco subcribeNext non è stato chiamato.
L'input atteso è:
>>> Observable value changed: <Original>
Updated value to <Updated>
>>> Observable value changed: <Updated>
Qualsiasi idea di come risolvere il problema?
Questo funziona! Molte grazie! –
sembra funzionare quando si aggiunge il modificatore 'dinamico' al primo esempio –
L'osservazione valore-chiave è un meccanismo che consente agli oggetti di essere notificati delle modifiche alle proprietà specificate di altri oggetti. È possibile utilizzare l'osservazione dei valori-chiave con una classe Swift, a condizione che la classe erediti dalla classe NSObject. È possibile utilizzare questi tre passaggi per implementare l'osservazione dei valori-chiave in Swift. https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html –