RACSubject及其子类的一些用法

2017-01-14 15:49:53来源:http://www.jianshu.com/p/7d0fe56a0ddf作者:熊妹妹人点击

第七城市
RACSubject

RACSubject继承自RACSignal,并实现RACSubscriber协议。所以它可以生成信号源,也可以订阅信号。


- (void)testSubject {
RACSubject *subject = [RACSubject subject];
// 作为信号源,被订阅
[subject subscribeNext:^(id x) {
NSLog(@"订阅者一%@",x);
}];
[subject subscribeNext:^(id x) {
NSLog(@"订阅者二%@",x);
}];

// 作为订阅者,发送信号
[subject sendNext:@1];
}

RACSubject在被订阅时,block会包装进RACSubscriber生成订阅者o对象,然后通过subscribe:订阅方法保存到subscribers数组中,所以RACSubject可以被订阅多次。而RACSignal不具备此功能


RACReplaySubject

继承自RACSubject,会保存发送信号的值。所以在订阅时,会把信号值全部发送。无论订阅和发送信号的顺序,订阅的block内都会收到信号值。


- (void)testReplay {
RACReplaySubject *subject = [RACReplaySubject subject];
// 发送信号
[subject sendNext:@"12"];
// 订阅信号
[subject subscribeNext:^(id x) {
NSLog(@"订阅者一%@",x);
}];
// 发送信号
[subject sendNext:@"34"];
[subject sendNext:@"56"];
// 1.把值保存到数组
// 2.遍历所有的订阅者,调用nextBlock
// 订阅信号
[subject subscribeNext:^(id x) {
NSLog(@"订阅者二%@",x);
}];
}

RACReplaySubject把信号值存放在valuesReceived数组内后,会执行父类的sendNext:方法,所以即使是后面发送的信号,之前订阅过也会收到。


RACBehaviorSubject

RACBehaviorSubject,把最后一次sendNext的值保存在currentValue变量内。所以先订阅的信号会收到每次发送的信号值,而后订阅的信号之后收到最后一次信号值。


RACGroupedSignal

可以讲信号分组,一般用在[RACSignal groupBy:transform:]




第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台