如何保证ReactiveCocoa中订户消息的顺序?

时间:2014-03-13 17:34:44

标签: objective-c reactive-programming reactive-cocoa

我想在self.personsArray更新时执行各种任务,如下所示:

- (void)viewDidAppear:(BOOL)animated
{
    @weakify(self)

    [RACObserve(self, personsArray) subscribeNext:^(NSArray *personsArray) {
        @strongify(self)

        // update a set of views

        [self.view setNeedsUpdateConstraints];
        [self.view setNeedsLayout];
    }];

    [RACObserve(self, personsArray) subscribeNext:^(NSArray *personsArray) {
        @strongify(self)

        // update a second set of views

        [self.view setNeedsUpdateConstraints];
        [self.view setNeedsLayout];
    }];

    [RACObserve(self, personsArray) subscribeNext:^(NSArray *personsArray) {
        @strongify(self)

        [UIView animateWithDuration:0.4 animations:^{
            [self.view layoutIfNeeded];
        }];
    }];
}

我更喜欢在不同的块中分离工作,因为它提供了逻辑分离。我想保证最后发送最后一条订阅消息(执行动画块的消息)。我怎么能这样做?

在我看来,我正在寻找的可能是链接(而不是多个独立的信号集作为订阅,就像我在这个例子中所做的那样),但我不能相当连接点。

1 个答案:

答案 0 :(得分:2)

为什么不直接更新不同的部分:

- (void)viewDidAppear:(BOOL)animated
{
    @weakify(self)

    [RACObserve(self, personsArray) subscribeNext:^(NSArray *personsArray) {
        @strongify(self)

        // update a set of views
        [self updateFirstSetOfView];
        [self updateSecondSetOfView];
        [self doSomethingElse];

        // Finally
        [UIView animateWithDuration:0.4 animations:^{
            [self.view layoutIfNeeded];
        }];

    }];
}

如果您更喜欢链接,则可以使用-doNext:实现相同的效果。