- 创建RACCommand需要提供一个block参数,这个block返回RACSignal,也就是说block内部需要创建一个RACSignal。
self.command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[self httpRequest:@"POST" param:@{@"commandKey":input} completion:^(id response) {
[subscriber sendNext:@(999)];
[subscriber sendCompleted];
}];
return nil;
}];
return signal;
}];
- 如何能够获取block创建的信号传递的值?通过如下方式去订阅block创建的信号。
[self.command.executionSignals.switchToLatest subscribeNext:^(id x) {
if ([x integerValue] == 999) {
NSLog(@"登陆成功");
}
}];
- 订阅block创建的信号不会使block的信号执行,那么block的信号是如何执行的?
[self.command execute:@"入参"];
- 如何将RACCommand与UIButton联系起来?
[[self.button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
[self.viewModel.command execute:@"在ViewController中按钮按下执行RACCommand"];
}];
总结
RACCommand将事件处理(网络请求),事件中的数据如何传递(subscribeNext)包装起来。
网友评论