如何合并两个 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;
//...
}
我正在拨打 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;
//...
}