Objective c 反应性可可粉&x2B;进度指标

Objective c 反应性可可粉&x2B;进度指标,objective-c,uiviewcontroller,reactive-cocoa,Objective C,Uiviewcontroller,Reactive Cocoa,我有一个类EventPresentationController,它在事件对象中显示数据。该类需要传递一个事件对象,但有时需要首先从远程服务下载该对象。我不希望控制器有任何网络方面的知识,所以我认为与其传递事件对象,不如传递RAC信号。然后,如果对象存在,我可以立即发送信号,但如果对象需要下载,我可以下载它然后发送信号。但是,如果确实需要下载,我希望控制器显示一个活动指示器 我看到RACCommand有一个我可以订阅的执行信号,所以我想我可以传递它,而不是一个事件,但是从语义上讲,用“命令”初始

我有一个类EventPresentationController,它在事件对象中显示数据。该类需要传递一个事件对象,但有时需要首先从远程服务下载该对象。我不希望控制器有任何网络方面的知识,所以我认为与其传递事件对象,不如传递RAC信号。然后,如果对象存在,我可以立即发送信号,但如果对象需要下载,我可以下载它然后发送信号。但是,如果确实需要下载,我希望控制器显示一个活动指示器


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

这是一个有趣的问题。我认为你的直觉是对的,你应该给视图控制器一个信号

那么让我们继续吧。然后假设视图控制器有一个
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:
来短路
加载
信号