为什么RACObserve不能使用RACS主题?

时间:2015-07-11 16:52:51

标签: reactive-cocoa

我的代码中有几个地方使用RACSubject而不是普通的RACSignal - 通常这些只是用于使用nil数据的事件通知。无论如何,有一件事让我感到困惑的是试图使用标准的RACObserve - subscribeNext'关于这个问题并注意到事件没有触发阻止。

使用RACObserve& subscribeNext,类似于大多数标准RACSignals所做的:

self.subjectOne = [RACSubject subject];

[RACObserve(self, subjectOne) subscribeNext:^(NSString * x) {
    NSLog(@"subjectOne: %@", x);
}];

[self.subjectOne sendNext:@"foo"];
[self.subjectOne sendNext:@"bar"];

产生以下输出:

subjectOne: <RACSubject: 0x600000025700> name:

为什么要这而不是两个事件?

注意:这是使用ReactiveCocoa 2.x

完成的

1 个答案:

答案 0 :(得分:2)

在RACSubject上使用RACObserve的问题在于它是rac_valuesForKeyPath的宏,并且由于我们没有观察到的实际属性,我们只看到初始的副作用得到打印出来,没有别的。如果您在副作用上断点并查看subjectOne&#34;订阅者&#34;财产,你会注意到它甚至没有订户。

解决方案是在没有RACObserve的情况下使用subscribeNext。

仅使用subscribeNext的示例:

self.subjectTwo = [RACSubject subject];

[self.subjectTwo subscribeNext:^(NSString * x) {
    NSLog(@"subjectTwo: %@", x);
}];

[self.subjectTwo sendNext:@"baz"];
[self.subjectTwo sendNext:@"cat"];

导致输出:

subjectTwo: baz
subjectTwo: cat