概述
1. RAC常见的宏
1.1 宏:RAC
作用:
给某个对象
的某个属性
绑定信号,一旦信号产生数据,就会将内容赋值给属性
!
应用场景:
例如,监听textField的值,并把textField的值赋值给外部某个属性。
- 常规的做法:
调用textfield的代理方法:
- (void)textFieldDidEndEditing:(UITextField *)textField;
- RAC的繁琐操作:
监听文本框的内容,创建信好
[_textField.rac_textSignal subscribeNext:^(NSString * _Nullable x) {
_label.text = x;
}];
- RAC的简单操作:
利用
RAC
这个宏,给对象的属性绑定一个信号,一旦有信号产生,就把信号里的数据赋值给这个对象的属性。
RAC(_label,text) = _textField.rac_textSignal;
解读:就是给_label这个控件的text属性,绑定一个_textField 文本内容变化的信号,当_textfield的文本内容变化时,便把文本的内容赋值给_label的text。
1.2 宏:RACObserve
作用:
给某个对象添加属性的监听,相当于kvo。
使用方法如下:
[RACObserve(self.label, text) subscribeNext:^(id
_Nullable x) {
NSLog(@"%@",x);
}];
解读如下:
当self.label里面的内容发生变化时,就会发送信号,并监听到。
2. RACMulticastConnection信号连接类
应用场景:
当发送一个信号,多处需要订阅时,如果用signal 直接调用subscribeNext的方法,那么订阅了几次,信号就会发送几次。
RACMulticastConnection
这个类可以将多个信号连接起来订阅一次。
使用思路:
1.用
RACSignal
创建信号
2.信号调用publish
,将信号转成连接类
3.用subscribeNext
订阅连接类的信号
4.用connect
将连接类连接起来
代码实现如下:
-(void)RACMulticastConnectionDemo{
//不管订阅多少次信号,就只会请求一次数据
//RACMulticastConnection:必须要有信号
//1.创建信号
RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>
_Nonnull subscriber) {
//发送网络请求
NSLog(@"发送请求");
//发送数据
[subscriber sendNext:@"请求到的数据"];
return nil;
}];
//2.将信号转成连接类!!
RACMulticastConnection *connection = [signal publish];
//3.订阅连接类的信号
[connection.signal subscribeNext:^(id
_Nullable x) {
NSLog(@"A处在处理数据%@",x);
}];
[connection.signal subscribeNext:^(id
_Nullable x) {
NSLog(@"B处在处理数据%@",x);
}];
//4.连接
[connection connect];
}
3.bind
代码简单使用如下:
//1.创建信号
RACSubject * subject = [RACSubject subject];
//2.绑定信号
RACSignal * bindSignal = [subject bind:^RACSignalBindBlock _Nonnull{
return ^RACSignal * (id value, BOOL *stop){
//block调用:只要源信号发送数据,就会调用bindBlock
//block作用:处理原信号内容
//value:源信号发送的内容
NSLog(@"%@",value);
//返回信号,不能传nil , 返回空信号 :[RACSignal empty]
return [RACReturnSignal return:value];
};
}];
//3.订阅信号
[bindSignal subscribeNext:^(id
_Nullable x) {
NSLog(@"绑定接收到!! %@",x);
}];
//4.发送
[subject sendNext:@"发送原始的数据"];
4.RACCommand
//1.创建命令
RACCommand * command = [[RACCommand alloc]initWithSignalBlock:^RACSignal * _Nonnull(id
_Nullable input) {
NSLog(@"%@",input);
//input:指令
//
return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>
_Nonnull subscriber) {
//发送数据
[subscriber sendNext:@"执行完命令之后产生的数据"];
return nil;
}];
}];
//2.执行命令
RACSignal * signal = [command execute:@"输入的指令!!"];
//3.订阅信号!
[signal subscribeNext:^(id
_Nullable x) {
NSLog(@"%@",x);
}];
5. 获取最新的信号
//创建多个信号
RACSubject * signalOfSignal = [RACSubject subject];
RACSubject * signal1 = [RACSubject subject];
RACSubject * signal2 = [RACSubject subject];
RACSubject * signal3 = [RACSubject subject];
//订阅信号
//
[signalOfSignal subscribeNext:^(id
_Nullable x) {
//
[x subscribeNext:^(id
_Nullable x) {
//
NSLog(@"%@",x);
//
}];
//
}];
//switchToLatest :最新的信号!!
[signalOfSignal.switchToLatest subscribeNext:^(id
_Nullable x) {
NSLog(@"%@",x);
}];
//发送信号
[signalOfSignal sendNext:signal1];
[signalOfSignal sendNext:signal2];
[signalOfSignal sendNext:signal3];
//发送数据
[signal3 sendNext:@"3"];
[signal2 sendNext:@"2"];
[signal1 sendNext:@"1"];
因为最后发送信号的是,signal3,所以最新的信号时3。
最后
以上就是雪白小懒猪为你收集整理的03-RAC之常见的宏以及其他的用法1. RAC常见的宏1.2 宏:RACObserve2. RACMulticastConnection信号连接类3.bind4.RACCommand5. 获取最新的信号的全部内容,希望文章能够帮你解决03-RAC之常见的宏以及其他的用法1. RAC常见的宏1.2 宏:RACObserve2. RACMulticastConnection信号连接类3.bind4.RACCommand5. 获取最新的信号所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复