- (IBAction)test:(id)sender {
[selftest5];
return;
// RACCommand: 处理事件
// 不能返回空的信号
// 1.创建命令
RACCommand*command = [[RACCommand alloc]initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) {
//block调用,直行行命令的时候就会调用
NSLog(@"执行命令传进来的参数==%@",input); // input 为执行命令传进来的参数
return [RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) {
[subscribersendNext:@"执行命令产生的数据"];
returnnil;
}];
}];
// 如何拿到执行命令中产生的数据呢?
// 订阅命令内部的信号
// ** 方式一:直接订阅执行命令返回的信号
// 2.执行命令
RACSignal *signal =[command execute:@{@"key":@2,@"key2":@3}]; // 这里其实用到的是replaySubject 可以先发送命令再订阅
// 在这里就可以订阅信号了
@weakify(self);
[signalsubscribeNext:^(idx) {
NSLog(@"%@",x);
@strongify(self);
self.contentL.text= x;
}];
}
// RACCommand:RAC中用于处理事件的类,可以把事件如何处理,事件中的数据如何传递,包装到这个类中,他可以很方便的监控事件的执行过程,比如看事件有没有执行完毕
// 使用场景:监听按钮点击,网络请求
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
// 方式二:
// 订阅信号
// 注意:这里必须是先订阅才能发送命令
// executionSignals:信号源,信号中信号,signalofsignals:信号,发送数据就是信号
-(void)test1{
RACCommand*command= [[RACCommand alloc]initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) {
NSLog(@"执行命令传进来的参数==%@",input); // input 为执行命令传进来的参数
return [RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) {
[subscribersendNext:@"产生的数据"];
returnnil;
}];
}];
@weakify(self);
[command.executionSignals subscribeNext:^(RACSignal *x) {
[xsubscribeNext:^(id _Nullablex) {
NSLog(@"%@",x);
@strongify(self);
self.contentL.text= x;
}];
}];
// 2.执行命令
[commandexecute:@2];
}
// 高级做法
- (void)test3 {
// 1.创建命令
RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
// block调用:执行命令的时候就会调用
NSLog(@"%@", input);
// 这里的返回值不允许为nil
return [RACSignal createSignal:^RACDisposable *(id subscriber) {
[subscribersendNext:@"发送信号"];
returnnil;
}];
}];
// 方式三
// switchToLatest获取最新发送的信号,只能用于信号中信号。
[command.executionSignals.switchToLatest subscribeNext:^(id x) {
NSLog(@"%@", x);
}];
// 2.执行命令
[commandexecute:@3];
}
// switchToLatest
- (void)test4 {
// 创建信号中信号
RACSubject*signalofsignals = [RACSubjectsubject];
RACSubject *signalA = [RACSubject subject];
// 订阅信号
// [signalofsignals subscribeNext:^(RACSignal *x) {
// [x subscribeNext:^(id x) {
// NSLog(@"%@", x);
// }];
// }];
// switchToLatest: 获取信号中信号发送的最新信号
[signalofsignals.switchToLatestsubscribeNext:^(idx) {
NSLog(@"%@", x);
}];
// 发送信号
[signalofsignalssendNext:signalA];
[signalAsendNext:@4];
}
// 监听事件有没有完成
- (void)test5 {
//注意:当前命令内部发送数据完成,一定要主动发送完成
// 1.创建命令
RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
// block调用:执行命令的时候就会调用
NSLog(@"%@", input);
// 这里的返回值不允许为nil
return [RACSignal createSignal:^RACDisposable *(id subscriber) {
// 发送数据
[subscribersendNext:@"执行命令产生的数据"];
// *** 发送完成 **
[subscribersendCompleted];
returnnil;
}];
}];
// 监听事件有没有完成
[command.executing subscribeNext:^(id x) {
if([xboolValue] ==YES) {// 正在执行
NSLog(@"当前正在执行%@", x);
}else{
// 执行完成/没有执行
NSLog(@"执行完成/没有执行");
}
}];
// 2.执行命令
[commandexecute:@1];
}