RACCommand使用简介

来源:互联网 发布:美津浓2016跑鞋矩阵 编辑:程序博客网 时间:2024/05/23 00:10

RAC中用于处理事件的类,可以把事件如何处理,事件中的数据如何传递,包装到这个类中,他可以很方便的监控事件的执行过程。
本文转载自:http://www.jianshu.com/p/87ef6720a096

第一种方式,代码如下:

// 1. 创建命令
RACCommand command = [[RACCommand alloc] initWithSignalBlock:^RACSignal _Nonnull(id _Nullable input) {
// input 为执行命令传入的参数
// 该block为执行命令时调用
NSLog(@”input : %@”, input);
return [RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) {
// 发送数据
[subscriber sendNext:@”执行完命令后,反馈的数据”];
// * 数据发送完成
[subscriber sendCompleted];
return nil;
}];
}];
// 2. 执行命令
RACSignal *signal = [command execute:@5];
[signal subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];

第二种方式,代码如下:

// 1. 创建命令
RACCommand command = [[RACCommand alloc] initWithSignalBlock:^RACSignal _Nonnull(id _Nullable input) {
// input 为执行命令传入的参数
// 该block为执行命令时调用
NSLog(@”input : %@”, input);
return [RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) {
// 发送数据
[subscriber sendNext:@”执行完命令后,反馈的数据”];
// * 数据发送完成
[subscriber sendCompleted];
return nil;
}];
}];
// 2. 订阅信号(必须在执行命令前订阅信号)
// a—->executionSignals:信号源,信号中信号,发送数据就是信号
[command.executionSignals subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
[x subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
}];
// b—->switchToLatest 获取最新发送的信号,只能用于信号中信号
[command.executionSignals.switchToLatest subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
// 3. 执行命令
[command execute:@1];

添加监听事件有没有执行完成,代码如下:

// 1. 创建命令
RACCommand command = [[RACCommand alloc] initWithSignalBlock:^RACSignal _Nonnull(id _Nullable input) {
// input 为执行命令传入的参数
// 该block为执行命令时调用
NSLog(@”input : %@”, input);
return [RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) {
// 发送数据
[subscriber sendNext:@”执行完命令后,反馈的数据”];
// * 数据发送完成
[subscriber sendCompleted];
return nil;
}];
}];
// 2. 订阅信号(必须在执行命令前订阅信号)
[command.executionSignals.switchToLatest subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
// 4. 监听命令是否执行完成
[command.executing subscribeNext:^(NSNumber * _Nullable x) {
if ([x boolValue] == YES) {
NSLog(@”当前正在执行”);
} else {
// 执行完成/没有执行
NSLog(@”执行完成/没有执行”);
}
}];
// 3. 执行命令
[command execute:@1];

响应UIButton的事件

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(100, 100, 100, 100);
button.backgroundColor = [UIColor redColor];
[self.view addSubview:button];
[[button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
NSLog(@”点击了按钮”);
}];
button.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) {
NSLog(@”触发事件”);
return [RACSignal empty];
}];

这里写图片描述

原创粉丝点击