2013-06-19 12 views

Antwort

6

Signale haben keine Ahnung von ein "aktueller" Wert. Werte werden gesendet, dann verschwinden sie - sie sind sehr flüchtig (es sei denn, ein Wiederholungsgegenstand oder andere Tricks werden verwendet).

Wahrscheinlich möchten Sie dieses Signal abonnieren. Schauen Sie sich die Framework Overview und die examples in the README für eine tiefere Erklärung.

+0

Danke zu machen. Ich wollte nur sicher sein. Manchmal gibt es die Versuchung, nicht alles in ReactvieCocoa Welt umzuwandeln. –

+1

Aber ich kann: RAC (self.number) = Signal; und dann benutze self.number an irgendeiner Stelle. –

+1

@ 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. –

2
  1. Ihr "aktueller Wert von ReactiveCocoa Signal" in Sprache Reactive - ist ein Abonnement auf dieses Signal.

Die -subscribe... Methoden geben Sie den aktuellen und zukünftigen Werte in einem Signal zuzugreifen:

[signal subscribeNext:^(id x) { 
     NSLog(@"Current value = %@", x); 
    }]; 
  1. Eine andere Möglichkeit: Wenn Sie diesen Wert mit anderen Werten verwenden möchten - verwenden combineLatest:reduce: Methode wie folgt aus:

    RACSignal *calculationWithCurrentValueSignal = 
        [RACSignal combineLatest:@[signalWithCurrentValueThatNeeded, anotherSignal] 
            reduce:^id(NSNumber *myCurrentValue, NSNumber *valueFromAnotherSignal) { 
             //do your calculations with this values.. 
             return newValue; 
            }]; 
    
1

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() 
Verwandte Themen