2013-06-19 21 views

回答

6

信號都沒有的概念一個「當前」值。值被髮送,然後消失 - 它們非常短暫(除非使用重播主題或其他技巧)。

您可能想要訂閱該信號。請查看Framework Overviewexamples in the README以獲得更深入的解釋。

+0

謝謝。只是想確定。有時候會有一種誘惑,不會將所有東西都轉換成ReactvieCocoa世界。 –

+1

但我可以這樣做:RAC(self.number)= signal;然後在某個地方使用self.number。 –

+1

@LeszekŻarna是的,它會用信號中的最新值更新'self.number',但它仍然依賴於_subscription_的概念。瞭解訂閱如何工作將使RAC的其餘部分更容易獲取。 –

2
  1. 在無語言「電流ReactiveCocoa信號值」 - 是一個訂閱這個信號。

-subscribe...方法給你訪問到當前和未來值的信號:

[signal subscribeNext:^(id x) { 
     NSLog(@"Current value = %@", x); 
    }]; 
  1. 另一種方法:如果你想使用這個值與另一個值 - 使用combineLatest:reduce:方法像這樣:

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

是否也適用於Swift版本?

使用SignalPipe觀察對象屬性的更改。當訂閱來自其他幾個對象的信號,即queue.queueCountSignal.observeNext({...})時,觀察塊將在下次屬性改變時執行。有沒有辦法請求當前值或觸發observeNextBlock?

我不想使用SignalProducer(可以明確啓動),因爲這意味着我需要從需要信號的每個對象收集observeNext塊。我也不想爲同樣的事情創建幾個信號發生器 - 或者這是真的想要嗎?

下面是示例代碼,以使更清晰

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