2019独角兽企业重金招聘Python工程师标准>>>
订阅信号及接收
1、创建信号(冷信号)
创建信号,需要传入订阅者
//didSubscriber 调用:只要一个信号被订阅就会调用
//didSubscriber 作用:发送数据
RACDisposable * (^didSubscribe)(id <RACSubscriber> subscriber) = ^RACDisposable * (id <RACSubscriber> subscriber) {NSLog(@"信号被订阅");//3 发送数据[subscriber sendNext:@1];return nil;
};//1 创建信号(冷信号)
RACSignal * signal = [RACSignal createSignal:didSubscribe];
2、订阅信号(热信号)
//2 订阅信号(热信号)
[signal subscribeNext:^(id x) {//nextBlock 调用:只要订阅者发送数据就会调用//nextBlock 作用:处理数据,展示到UI上面//x:信号发送的内容NSLog(@"信号发送的内容:%@",x);}];
3、发送信号
这一步,在创建信号时(第一步,穿件订阅者时)已经写好!
运行结果:
取消订阅及接收
1、创建信号
RACSignal * signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {NSLog(@"信号被订阅");//3 发送信号[subscriber sendNext:@"123"];return [RACDisposable disposableWithBlock:^{//只要信号取消订阅 就会执行这//清空资源NSLog(@"信号被取消订阅了");}];}];
2、订阅信号
RACDisposable * disposable = [signal subscribeNext:^(id x) {NSLog(@"信号发送的内容:%@",x);
}];
3、取消订阅
[disposable dispose];
运行结果:
一个实例:
有一个BlueView,点击其上的按钮,在BlueView类中发送信号,在控制器中接收到信号。
1、BlueView中的信号属性:
@interface BlueView : UIView@property (nonatomic, strong)RACSubject * btnClickSignal;@end
懒加载信号属性:
- (RACSubject *)btnClickSignal{if (!_btnClickSignal) {_btnClickSignal = [RACSubject subject];}return _btnClickSignal;
}
2、发送信号:
点击按钮事件触发发送信号。
- (IBAction)btnClick:(id)sender{NSLog(@"发送了信号");//发送信号[self.btnClickSignal sendNext:@"我被点击了"];
}
3、在控制器中接收信号:
//接收信号
[_blueView.btnClickSignal subscribeNext:^(id x) {NSLog(@"接收到的信号:%@",x);
}];
运行点击按钮,打印结果:
至此我们学习了解了,RAC对信号的订阅、取消订阅、接收等处理。
Github:
https://github.com/ly918/Demos