ReactiveCocoa学习

RACCommand

2017-09-17  本文已影响29人  tom555cat
  1. 创建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;
    }];
  1. 如何能够获取block创建的信号传递的值?通过如下方式去订阅block创建的信号。
    [self.command.executionSignals.switchToLatest subscribeNext:^(id x) {
        if ([x integerValue] == 999) {
            NSLog(@"登陆成功");
        }
    }];
  1. 订阅block创建的信号不会使block的信号执行,那么block的信号是如何执行的?
[self.command execute:@"入参"];
  1. 如何将RACCommand与UIButton联系起来?
    [[self.button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
        [self.viewModel.command execute:@"在ViewController中按钮按下执行RACCommand"];
    }];

总结

RACCommand将事件处理(网络请求),事件中的数据如何传递(subscribeNext)包装起来。

上一篇 下一篇

猜你喜欢

热点阅读