前言
上一篇文章中,笔者简单的阅读了ReactiveCocoa官方文档,了解了ReactiveCocoa的基本使用后。这篇文章主要探讨一下,如何基于MVVM的设计模式在含有UITableView界面中使用RAC绑定数据。
MVVM
MVVM本质上是基于MVC的一个改进版,它是在传统MVC模式上添加了一个ViewModel。ViewModel可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑,为Controller减压。
实战
下面笔者将基于ReactiveCocoa+MVVM+UITableView,实现一个常见的列表展示,以及按钮点击改变cell中的字体颜色。
源码地址:
https://github.com/pengwj/blogWork/tree/master/code/ReacttiveObjC-MVVM-tableview
Controller
移除网络请求以及数据处理后的Controller异常的简洁。我看很多人将tablevie的delegate、datasoure代理方法都放到了ViewModel中,但是考虑到这样的话ViewModel就绑定了View,所以最终决定将代理方法都放在VC中,具体可以下载我的代码看看。
// 核心代码如下
- (void)initViewModel {
_viewModel = [MainViewModel new];
@weakify(self)
[_viewModel.fetchProductCommand.executing subscribeNext:^(NSNumber *executing) {
NSLog(@"command executing:%@", executing);
if (!executing.boolValue) {
@strongify(self)
[self.tableView.mj_header endRefreshing];
}
}];
[_viewModel.fetchMoreProductCommand.executing subscribeNext:^(NSNumber *executing) {
if (!executing.boolValue) {
@strongify(self);
[self.tableView.mj_footer endRefreshing];
}
}];
[_viewModel.errors subscribeNext:^(NSError *error) {
NSLog(@"something error:%@", error.userInfo);
//TODO: 这里可以选择一种合适的方式将错误信息展示出来
}];
}
- (void)bindViewM