我有一個單身人士有財產KGTour * tour; 單身人士擁有一個RACReplaySubject * tourChangedSubject,如果它被設置,它將發送巡迴對象。反應可可:重播如果變得活躍
[mySingleton startTour:aNewTourObject];
在我單身的定製的setter
: - 初始化時 -
- (void)startTour:(KGTour *)tour {
[self.tourChangedSubject sendNext:tour];
}
然後我有一個視圖模型是重播的最後旅程:
[[mySingleton.tourChangedSubject replayLast]] subscribeNext:^(id x) {
...
}];
可正常工作,一切都很好目前。
但是:我的目標是僅在我的viewModel處於活動狀態而另一個屬性設置爲true時才重播此漫遊。 所以我創建告訴我,當「準備就緒」(如果主動和isLoaded屬實)的信號:
self.isLoadedSignal = [RACObserve(self, isLoaded)
filter:^(NSNumber *loaded) {
return loaded.boolValue;
}];
self.isActiveSignal = [RACObserve(self, isActive)
filter:^(NSNumber *active) {
return active.boolValue;
}];
RACSignal *readySignal = [self.isActiveSignal
flattenMap:^RACStream *(id value) {
@strongify(self);
return self.mapIsLoadedSignal;
}];
視圖模型可以切換其工作狀態。 它再次活躍後,我想獲得最新的旅遊和做一些事情。
例如該viewModel活動幾秒鐘,現在它的活動標誌設置爲false。如果不活動,更新單身人士的導覽屬性(併發出tourChangedSubject)不應該打擾不活動的viewModel。但是如果viewModel再次激活,它應該重放上一次巡視以更新viewModel的一些UI。
我真的很喜歡RAC,但我有我的麻煩真的進入它,所以任何提示將不勝感激!
歡呼
感謝,但lastTourIfReadySignal火災時立即tourChangedSubject發送旅遊(不可思議,但「tuple.second.boolValue」是真實的,雖然「積極」是NO)。 如果viewModel將其狀態更改爲active = YES(並且isLoaded = YES),我試圖重播上次巡視。活動可能會多次切換,而isLoaded只會更改一次(爲YES)。解釋這個案例不是很好,但希望你能理解這個用例... – kampfgnu
只有當viewModel isActive和isLoaded時,lastTourIfReadySignal纔會觸發。如果它是不活動的,mySingleton得到一個新的KGTour對象,lastTourIfReadySignal應該在viewModel isActive之後再次觸發... – kampfgnu
是的,我理解你的用例,我看不出爲什麼提議的解決方案不起作用。定義'isLoaded'和'isActive'? –