rac

作者: adalillian | 来源:发表于2020-07-15 17:50 被阅读0次

https://www.jianshu.com/p/7562a30c24c5

此文章问转载, 原文地址如上

RACCommand作用:

RAC中用于处理事件的类,可以把事件如何处理,事件中的数据如何传递,包装到这个类中,他可以很方便的监控事件的执行过程。

RACCommand使用场景:监听按钮点击,网络请求

简单实用实例

//1:创建命令 注意:command创建的block块返回值不能是nilRACCommand*command=[[RACCommand alloc]initWithSignalBlock:^RACSignal*_Nonnull(id  _Nullable input){return[RACSignal createSignal:^RACDisposable*_Nullable(id<RACSubscriber>_Nonnull subscriber){//发送数据[subscriber sendNext:@"执行完命令之后产生的数据"];returnnil;}];}];//2:执行命令RACSignal*signal=[command execute:@"输入指令"];//3:订阅信号[signal subscribeNext:^(id  _Nullable x){NSLog(@"%@",x);}];

通过executionSignals先订阅信号再执行命令

//command里面的信号可以被command的信号源所发送,即command.executionSignals的信号就是返回回来的信号,因为信号signal是一个对象,对象就可以通过数据的形式进行传输//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:@"执行完命令之后产生的数据"];returnnil;}];}];//订阅信号//executionSignals:信号源!!,发送信号的信号![command.executionSignals subscribeNext:^(RACSignal*x){[x subscribeNext:^(id  _Nullable x){NSLog(@"%@",x);}];NSLog(@"%@",x);}];//2.执行命令[command execute:@"输入的指令!!"];

Snip20181105_16.png

监听事件有没有执行完毕

//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:@"执行完命令之后产生的数据"];//发送完成[subscriber sendCompleted];returnnil;}];}];//监听事件有没有执行完毕command.executing也是一个信号,这里也执行了信号的订阅[command.executing subscribeNext:^(NSNumber*_Nullable x){if([x boolValue]){//正在执行!!NSLog(@"正在执行!!");}else{NSLog(@"已经结束咯&&还没开始做!");}}];RACSignal*signal=[command execute:@"执行!!"];[signal subscribeNext:^(id  _Nullable x){NSLog(@"接受到数据了!!%@",x);}];

注意:必须加上[subscriber sendCompleted]发送完成,

Snip20181105_17.png

Snip20181105_19.png

switchToLatest属性

//创建多个信号RACSubject*signalOfSignal=[RACSubjectsubject];RACSubject*signal1=[RACSubjectsubject];RACSubject*signal2=[RACSubjectsubject];RACSubject*signal3=[RACSubjectsubject];//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"];

相关文章

网友评论

      本文标题:rac

      本文链接:https://www.haomeiwen.com/subject/fbyjhktx.html