核心方法bind
//1.创建信号
RACSubject *subject = [RACSubject subject];
//2.绑定信号
RACSignal *bindSignal = [subject bind:^RACStreamBindBlock{
return ^RACSignal *(id value, BOOL *stop) {
NSLog(@"接收到参数:%@",value);
value = @321;
//block调用时刻:只要源信号发送了数据就会调用
//block作用:处理源信号内容
//返回信号,不能为nil
//创建空信号 [[RACSignal alloc]init]或者包装好的[RACSignal empty]
//需要把源信号的值经过处理后的值包装成信号发送出去
return [RACReturnSignal return:value];
};
}];
//3.订阅绑定信号
[bindSignal subscribeNext:^(id x) {
//当return信号被订阅的时候,就会调用这个block
NSLog(@"处理过的参数%@",x);
}];
//4.发送数据
[subject sendNext:@"123"];
bind底层实现
//1.创建信号RACSubject ===> _subscribers
//2.绑定信号bind ===> block
//3.创建绑定信号bindSignal ===> didSubscribe
//4.订阅绑定信号(RACDynamicSignal)
//5.创建一个订阅者(RACSubscriber) ===> nextBlock
//6.执行didSubscribe
//7.执行block ===> bindingBlock
//8.订阅源信号(RACSubject)
//9.创建订阅者(RACSubscriber) ===> nextBlock 1.id signal = bindingBlock(x, &stop); 2.addSignal(signal)
// errorBlock
// completedBlock
//10.源信号发送数据
//11.执行订阅者的nextBlock
//12.执行bindingBlock
//13.创建信号(RACReturnSignal)
//14.订阅信号(RACReturnSignal) ===> nextBlock 1.subscriber sendNext