我是靠谱客的博主 雪白小懒猪,最近开发中收集的这篇文章主要介绍03-RAC之常见的宏以及其他的用法1. RAC常见的宏1.2 宏:RACObserve2. RACMulticastConnection信号连接类3.bind4.RACCommand5. 获取最新的信号,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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. 获取最新的信号所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部