如何合并两个 Reactive Cocoa 命令?

How do I merge two Reactive Cocoa commands?

我正在拨打 2 个网络电话(案例详细信息和消息详细信息)。我想合并两个 RACCommand,以便它们都完成,然后我调用 nextMethod()。

下面是两个相互独立工作的调用:

@weakify(self);
[[self.loadCaseCommand.executionSignals switchToLatest] subscribeNext:^(MZACaseDetails *caseDetails) {
    @strongify(self);
    self.caseDetails = caseDetails;
    self.watcherAccessLevel = caseDetails.watcherAccessLevel;
    self.mutableCaseDetails = (MZAMutableCaseDetails *)[self.caseDetails mutableCopy];

    [self createViewModels];
    [(RACSubject *)self.contentDidChangeSignal sendNext:nil];
}];

[[self.loadMessagesCommand.executionSignals switchToLatest] subscribeNext:^(MZAMessage *messageDetails) {
    @strongify(self);
    self.messageDetails = messageDetails;
}];

如果您有两个或多个 RACSignal 并想将它们组合成一个 sendNext: 当所有输入 sendNext: 和 sendError: 当一个发送错误时,您应该使用 zip 运算符。

http://reactivex.io/documentation/operators/zip.html

反应式cocoa看起来像

RACSignal* signal1 = [self.loadCaseCommand.executionSignals switchToLatest];
RACSignal* signal2 = [self.loadMessagesCommand.executionSignals switchToLatest];

[RACSignal zip:@[signal1, signal2]] subscribeNext:^(RACTuple *data)
{
    RACTupleUnpack(MZACaseDetails *caseDetails, MZAMessage *messageDetails) = data;
    //...
}