ReactiveCocoa +进度指标

时间:2014-03-11 21:02:16

标签: objective-c uiviewcontroller reactive-cocoa

我有一个类EventPresentationController,它在Event对象中显示数据。该类需要传递一个Event对象,但有时需要首先从远程服务下载该对象。我不希望控制器对网络内容有任何了解,所以我认为不是传递一个Event对象,而是传递一个RAC信号。然后,如果对象存在,我可以立即发送信号,但如果需要下载对象,我可以下载它然后发送信号。但是,如果实际上需要进行下载,我希望控制器显示活动指示器。

我看到RACCommand有一个我可以订阅的执行信号,所以我想我可以传递它而不是一个事件,但在语义上用“命令”初始化一个视图控制器似乎很奇怪(相对于一个事件,或者发出事件的信号)。使用RACCommand是正确的做法吗?

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。我认为你的直觉是正确的,你应该向视图控制器传递一个信号。

所以,让我们一起去吧。然后,假设您的视图控制器具有activityIndicator属性。

您应该可以执行以下操作:

- (id)initWithEventSignal:(RACSignal *)signal {
    // ... init stuff ...

    // Send a YES and then a NO when `signal` completes. If `signal` 
    // immediately sends a value, then it will immediately send NO.
    RACSignal *loading = [[[RACSignal return:@YES] takeUntil:signal] concat:[RACSignal return:@NO]];
    RAC(self.activityIndicator, hidden) = [loading not];
    RAC(self, event) = signal;

    // ... other stuff ...
}

当事件信号发送结果时,我们正在使用-takeUntil:loading信号短路。