sind die Antworten auch für die Swift-Version gültig?
Bild ein SignalPipe Beobachten einer Änderungen an einer Objekteigenschaft. Wenn das Signal von mehreren anderen Objekten abonniert wird, d. H. queue.queueCountSignal.observeNext({...})
, wird der Beobachtungsblock ausgeführt, wenn sich die Eigenschaft das nächste Mal ändert. Gibt es eine Möglichkeit, nach dem aktuellen Wert zu fragen oder den observeNextBlock auszulösen?
Ich möchte keinen SignalProducer verwenden (der explizit gestartet werden kann), weil das bedeuten würde, dass ich die observeNext
Blöcke von jedem Objekt sammeln muss, das das Signal benötigt. Ich möchte auch nicht mehrere Signalproduzenten für dasselbe erstellen - oder ist das eigentlich gewünscht?
Hier ist der Code Beispiel deutlicher
import ReactiveCocoa
class SwipingQueueWithSignals<T> : SwipingQueue<T> {
override var count: Int {
didSet(oldQueueCount) {
let newQueueCount = self.count
queueCountSignalObserver.sendNext(newQueueCount)
}
let queueCountSignal: Signal<Int, NoError>
private let queueCountSignalObserver: Observer<Int, NoError>
init() {
(self.queueCountSignal, self.queueCountSignalObserver) = Signal<Int, NoError>.pipe()
super.init()
}
}
// Something like this
queue.queueCountSignal.
.observeNext { next in print(next) }
.lookupCurrentValueNow()
Danke zu machen. Ich wollte nur sicher sein. Manchmal gibt es die Versuchung, nicht alles in ReactvieCocoa Welt umzuwandeln. –
Aber ich kann: RAC (self.number) = Signal; und dann benutze self.number an irgendeiner Stelle. –
@ LeszekŻarna Ja, das wird "self.number" mit dem letzten Wert aus dem Signal aktualisieren, aber es hängt immer noch vom Konzept von _subscription_ darunter ab. Wenn Sie wissen, wie Abonnements funktionieren, wird der Rest von RAC sehr viel leichter zu erlernen sein. –