5
Próbuję adoptować ReactiveCocoa w mojej aplikacji na iOS napisanej w Swift. Niestety wygląda na to, że parametr rac_valuesForKeyPath nie działa zgodnie z oczekiwaniami. Oto przykład:ReactiveCocoa rac_valuesForKeyPath nie działa w 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)")
}
}
}
Przykład daje następujący wynik:
>>> Observable value changed: <Original>
Updated value to <Updated>
Oznacza to blok subcribeNext nie został powołany.
Oczekiwane wejście jest:
>>> Observable value changed: <Original>
Updated value to <Updated>
>>> Observable value changed: <Updated>
Każda wskazówka, jak rozwiązać ten problem?
To działa! Wielkie dzięki! –
wydaje się działać po dodaniu modyfikatora "dynamicznego" do pierwszego przykładu. –
Obserwacja wartości klucz-wartość jest mechanizmem, który pozwala na powiadamianie obiektów o zmianach w określonych właściwościach innych obiektów. Możesz użyć obserwacji wartości klucz-wartość za pomocą klasy Swift, o ile klasa dziedziczy z klasy NSObject. Możesz użyć tych trzech kroków do implementacji obserwacji wartości kluczowej w Swift. https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html –