MVVM ReactiveCocoaRAC+MVVM移动开发

ios--->MVVM使用😀

2016-06-21  本文已影响551人  Hither

最近发现自己的项目里C层的代码越来越多,即便把数据源和各种代理分离出去,也是多。就开始用MVVM来组织我的项目。下面是我找的一个demo我在他的基础上进行了修改下,公司的项目就不拿出来看了,嘿嘿😀,都是基于MVVM进行组织的。😂

在ViewModel里面有两个类。

第一个ViewModel:

//获取网络的链接状态
-(void) netWorkStateWithNetConnectBlock: (NetWorkBlock) netConnectBlock WithURlStr: (NSString *) strURl;

// 传入交互的Block块
-(void) setBlockWithReturnBlock: (ReturnValueBlock) returnBlock
                 WithErrorBlock: (ErrorCodeBlock) errorBlock
               WithFailureBlock: (FailureBlock) failureBlock;

第二个ViewModel:

//跳转到微博详情页
-(void) weiboDetailWithPublicModel: (WBDataUser *) publicModel WithViewController: (UIViewController *)superController;

//tableView刷新的网络请求
-(void)RefreshRequestWithCallback:(callback)callback isHead:(BOOL)result;

重点讲讲跳转和刷新:
(1)跳转:

#pragma 跳转到详情页面,如需网路请求的,可在此方法中添加相应的网络请求
-(void) weiboDetailWithPublicModel:(WBDataUser *)publicModel WithViewController:(UIViewController *)superController
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    PublicDetailViewController *detailController = [storyboard instantiateViewControllerWithIdentifier:@"PublicDetailViewController"];
    detailController.publicModel = publicModel;
    [superController.navigationController pushViewController:detailController animated:YES];
}

这个是直接使用StroyBoard搭建的界面:

注意两个地方:

记得设置StroyBoard ID 和Class

记得设置Cell的Class 和Identifier 以及Accessory

(2)刷新:

在ViewModel里:
-(void)RefreshRequestWithCallback:(callback)callback isHead:(BOOL)result{
    if (result) {
        _page = 1;
    }else{
        if (_page < 2) {
            _page = 2;
        }
    }
    [HJTNetTool get:[NSString stringWithFormat:@"%@?access_token=%@&count=100",GetData,ACCESSTOKEN] progress:^(NSProgress * _Nonnull progress) {
        
    } success:^(id  _Nonnull responseObject) {
        _model = [[WBDataWBData alloc]initWithDictionary:responseObject];
        if (_model.statuses) {
            NSMutableArray *dataArray=[NSMutableArray array];
            if (result) {
                [dataArray removeAllObjects];
            }else{
                _page ++;
            }
            
            for (WBDataStatuses* statues in _model.statuses) {
                [dataArray addObject:statues.user];
            }
           
            callback(dataArray);
        }
    } failure:^(NSString * _Nonnull errorLD) {
        SHOW_NTERROR
        
    }];
}

使用的VC中:
//下拉加载
-(void)loadNewData{
    [tableViewModel RefreshRequestWithCallback:^(NSArray *array) {
        _publicModelArray  =  [array mutableCopy];
        [self.tableView.mj_header endRefreshing];
        [self.tableView reloadData];
        
        
    } isHead:YES];
}
//上拉加载更多
-(void)loadMoredata{
    [tableViewModel RefreshRequestWithCallback:^(NSArray *array) {
         _publicModelArray  =  [array mutableCopy];
        [self.tableView.mj_footer endRefreshing];
        [self.tableView reloadData];
    } isHead:NO];
}

MVVM相比MVC,把逻辑处理和网络请求都放到了ViewModel这个类中进行,比起简简单单的分离数据源和代理,C层变得更加易于维护。

Demo地址:

老版本 ---> MVVM_ONE

优化版 ---> MVVM_TWO

上一篇 下一篇

猜你喜欢

热点阅读