RAC在实际开发中的运用

RAC+MVVM在目前代码中的运用:

阅读目前项目的代码的总结,这里只进行一些简单的主要逻辑上的介绍。

  • 每个ViewController``ViewModel``Model都有自己的一个基类,首先从ViewModel中开始说起:

    • 有一个RACCommand,一个RACSignal,一个dataArray给ViewController提供数据。

RACCommand的逻辑:

- (RACCommand *)command{
    if (!_command) {
        _command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
           // 这里进行判断,首先判断pageNum略过
            // 需要返回一个RACSignal 这里返回的是ViewModel自己的 requestListDataSignal
            // 然后过滤信号,这里做了一个判断检测是不是需要的model类型 如果是就继续
            return [[self.requestListDataSignal filter:^BOOL(id value) {
                return [value isKindOfClass:[ZCModel class]];
            }] doNext:^(ZCModel * x) {
                // 如果是需要的model类型 在这里将数据添加进来
                [self.dataArray addObject:x];
            }];
        }];
    }
    return _command;
}

RACSignal的逻辑:

- (RACSignal *)requestListDataSignal{
    /* 这个signal 在baseViewModel中先置空,在需要的地方重写
     return [WYMTCConsultCommonService historyOrderListWithParams:self.orderParams];
     这个方法在Service里实现,进行数据请求,并将需要转换为model 的数据用map映射为model
     */
    if (!_requestListDataSignal) {
        _requestListDataSignal = [[RACSignal createSignal:^RACDisposable *(id subscriber) {
            [subscriber sendNext:@"请求到的数据"];
            [subscriber sendCompleted];
            return [RACDisposable disposableWithBlock:^{
                // 数据请求完毕,取消task
            }];
        }] map:^ZCModel *(NSString * value) {
            // 把请求到的数据映射为model
            ZCModel * model = [[ZCModel alloc] init];
            model.name = value;
            model.detail = @"你说吧";
            return model;
        }];
    }
    return _requestListDataSignal;
}
  • ViewController也有自己的基类,在基类的viewDidLoad方法中调用[self.viewModel.command execute:@1];使得页面加载完成后开启RAC请求数据。

好吧,暂时就这些

你可能感兴趣的:(RAC在实际开发中的运用)