我的代码中有几个地方使用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
完成的答案 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