订阅信号及接收
1、创建信号(冷信号)
创建信号,需要传入订阅者
1
2
3
4
5
6
7
8
9
10
11
//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、订阅信号(热信号)
1
2
3
4
5
6
7
8
9
10
//2 订阅信号(热信号)
[signal subscribeNext:^(id x) {
//nextBlock 调用:只要订阅者发送数据就会调用
//nextBlock 作用:处理数据,展示到UI上面
//x:信号发送的内容
NSLog(@"信号发送的内容:%@",x);
}];
3、发送信号
这一步,在创建信号时(第一步,穿件订阅者时)已经写好!
运行结果:
取消订阅及接收
1、创建信号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
RACSignal * signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
NSLog(@"信号被订阅");
//3 发送信号
[subscriber sendNext:@"123"];
return [RACDisposable disposableWithBlock:^{
//只要信号取消订阅 就会执行这
//清空资源
NSLog(@"信号被取消订阅了");
}];
}];
2、订阅信号
1
2
3
4
RACDisposable * disposable = [signal subscribeNext:^(id x) {
NSLog(@"信号发送的内容:%@",x);
}];
3、取消订阅
1
[disposable dispose];
运行结果:
一个实例:
有一个BlueView,点击其上的按钮,在BlueView类中发送信号,在控制器中接收到信号。
1、BlueView中的信号属性:
1
2
3
4
5
@interface BlueView : UIView
@property (nonatomic, strong)RACSubject * btnClickSignal;
@end
懒加载信号属性:
1
2
3
4
5
6
- (RACSubject *)btnClickSignal{
if (!_btnClickSignal) {
_btnClickSignal = [RACSubject subject];
}
return _btnClickSignal;
}
2、发送信号:
点击按钮事件触发发送信号。
1
2
3
4
5
- (IBAction)btnClick:(id)sender{
NSLog(@"发送了信号");
//发送信号
[self.btnClickSignal sendNext:@"我被点击了"];
}
3、在控制器中接收信号:
1
2
3
4
//接收信号
[_blueView.btnClickSignal subscribeNext:^(id x) {
NSLog(@"接收到的信号:%@",x);
}];
运行点击按钮,打印结果:
至此我们学习了解了,RAC对信号的订阅、取消订阅、接收等处理。
Github: