2013-06-19 22 views

Odpowiedz

6

Sygnałów nie mają pojęcia "aktualna" wartość. Wartości są wysyłane, a następnie znikają - są bardzo efemeryczne (chyba że użyto tematu powtórki lub innych trików).

Prawdopodobnie chcesz zasubskrybować ten sygnał. Zapoznaj się z Framework Overview i examples in the README, aby uzyskać głębsze wyjaśnienie.

+0

Dziękuję. Chciałem tylko mieć pewność. Czasami istnieje pokusa, aby nie konwertować wszystkiego na świat ReactvieCocoa. –

+1

Ale mogę zrobić: RAC (self.number) = sygnał; a następnie użyć self.number w pewnym miejscu. –

+1

@ LeszekŻarna Tak, to zaktualizuje 'self.number' o najnowszą wartość sygnału, ale nadal zależy od pojęcia _subscription_ underneath. Zrozumienie, jak działają subskrypcje, sprawi, że pozostała część RAC będzie łatwiejsza do zdobycia. –

2
  1. Twój „aktualna wartość z sygnału ReactiveCocoa”w języku reaktywnych - to subskrypcja do tego sygnału.

W -subscribe... metody umożliwiają dostęp do aktualnych i przyszłych wartości w sygnale:

[signal subscribeNext:^(id x) { 
     NSLog(@"Current value = %@", x); 
    }]; 
  1. inny sposób: jeśli chcesz użyć tej wartości z innymi wartościami - użyj combineLatest:reduce: metody tak:

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

są również odpowiedzi ważne dla wersji Swift?

Wyobraź sobie SignalPipe obserwując zmiany we właściwości obiektu. Podczas subskrybowania sygnału z kilku innych obiektów, tj. queue.queueCountSignal.observeNext({...}), blok obserwacyjny zostanie wykonany przy następnym zmianie właściwości. Czy istnieje sposób na pytanie o aktualną wartość lub wyzwolenie obserwujNextBlock?

Nie chcę używać SignalProducer (który może być uruchamiany jawnie), ponieważ oznaczałoby to, że potrzebuję zebrać bloki observeNext z każdego obiektu, który jest potrzebny. Nie chcę też tworzyć kilku producentów sygnału dla tego samego - czy jest to rzeczywiście potrzebne?

Oto przykładowy kod do bardziej jasne

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() 
Powiązane problemy