objective-c - 如何保证 ReactiveCocoa 中订阅者消息的顺序?

标签 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];
        }];
    }];
}

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

在我看来,我正在寻找的可能是链接(而不是像我在本示例中所做的那样将多个独立的信号集作为订阅),但我无法完全连接这些点。

最佳答案

为什么不像这样更新不同的部分:

- (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: 实现相同的效果。

关于objective-c - 如何保证 ReactiveCocoa 中订阅者消息的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22386493/

相关文章:

ios - KVO 在 iOS 9.3 中损坏

ios - 仅更改 UIImageView 的高度

r - Shiny 的非 react 范围

ios - ReactiveSwift 中运算符 '<~' 的使用不明确

ios - UINavigationController 剪辑 subview

objective-c - 如何通过单击外部来关闭以弹出方式加载的 NSWindow?

c# - 使用 Directory.EnumerateFiles 的可观察异常处理

java - Reactor Flux 发布方法

ios - 如何使用 ReactiveCocoa 影响多个属性?

objective-c - 在 ReactiveCocoa 中观察的更好方法