RAC在实际开发中的运用

2017-11-28  本文已影响15人  考槃在涧
RAC+MVVM在目前代码中的运用:

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

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<RACSubscriber> 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;
}

好吧,暂时就这些

上一篇下一篇

猜你喜欢

热点阅读