使用RAC也有一段时间了,由于此前的项目都是使用的MVC模式,网络请求都封装在固定的模块中,抽取出来十分不方便,所以到目前为止并没有涉及到使用RAC去做获取网络请求的情景。
近期,着手重构目前手上的项目,准备给臃肿的Controller瘦身,MVVM貌似是一个不错的选择(既然使用了RAC,那为什么不使用MVVM呢?)。于是,开始上手体验MVVM模式和RAC的结合使用(RAC的基础知识在这就不介绍了,百度一下,一大推老司机都有分享)。不用不知道,一用才发现RAC和MVVM简直是绝配啊,那体验真是改变了我对编程的传统观念(函数响应式编程真心好用)。
这里用一个小demo来举例:
进入页面加载数据显示。这里使用我当前项目中的一个接口来模拟数据。既然是MVVM,那Model和ViewModel肯定是少不了的。如下:我们新建一个ViewModel叫LoadStoreViewModel(因为这里是加载商店数据),传统的MVC模式中,网络请求都是在ViewController中完成的,这里我们把网络请求封装到对应的ViewModel中去,能够有效的减少ViewController的负担,降低耦合性。
LoadStoreViewModel主要有三个属性:statues(网络加载状态),code1(编号),以及保存数据的数组dataArry,还有一个加载数据信号loadDataSignal;
初始化loadDataSignal:(主要进行网络请求)
//
- (RACSignal *)loadDataSignal{
if (_loadDataSignal==nil) {
AFHTTPRequestOperationManager *manager=[AFHTTPRequestOperationManager manager];
manager.requestSerializer=[[AFJSONRequestSerializer alloc]init];
NSDictionary *params=@{
@"code1":@"MWG08A09"};
_loadDataSignal=[manager rac_GET:kLoadURL parameters:params];
}
return _loadDataSignal;
}
调用loadDataSignal处理网络请求结果:
-(void)initWithSubscrible{
[[self.loadDataSignal</