一次简单的ReactiveCocoa+MVVM的实践

96
希望的翅膀
2016.08.08 17:26* 字数 959

毕业到现在已经两年多了,时间就像手中的沙子,无论你是摊开还是握紧,它总会从指间流逝!

      两年多的工作经验,从最初写代码什么东西都往控制器里写导致一个稍微大点的项目里随处可见容纳上千行代码的控制器,到为了提高运行效率而使用的MVC框架,再到如今的MVVM框架。一路走来不知道踩了多少的坑坑洼洼,但是我很庆幸自己坚持下来了。

     说起代码质量,我觉得很对不住上一家的公司,公司只有我一个iOS从去年中旬开始的两个项目,整体的框架是照着最普通的来的,基本一多半是用的MVC,因为是我自己做项目所以很多弊端出来了,没有一个整体的规范,自己想到哪里写到哪里,两个项目在大半年的时间里不停的添加功能,以至于后期我自己去维护都有点难以下手,超过千行的控制器比比皆是,那两个项目用的三方框架很多,很多三方不能达到我想要的效果所以当时直接去改的人家的源码(环信是其中之一,改过的环信已经不能叫环信了叫乱信也不为过)。对于三方框架小改可以大改的话还是用runtime去修改比较好,关于runtime也研究过很长一段时间,等有时间了再来聊聊怎么把runtime学以致用来改善代码质量。

      ReactiveCocoa,是由Github开源的一个应用于iOS和OS开发的新框架,网上有很多介绍它的文章,个人觉得最快让你上手ReactiveCocoa之基础篇 这篇作为入门很不错,这里我就不介绍它的使用方法了,贴上今天刚写的一个小程序

ReactiveCocoa一般情况下多与MVVM结合使用,它俩结合写出的代码层次分明,我们常用的很多软件都是采用这种框架实现的,比如网易新闻客户端


这是demo的整体架构 写之前先用cocoaPods 导入reactiveCocoa框架,导入方式很简单网上有很多教程。作为MVVM必不可少的几个必然是 View(DataView)    Model(DataModel)    ViewModel(DataViewModel)    Controller(ViewController)  

上面的Bar是我为了好写下载的动画 而用贝塞尔曲线写的图片下方的条状图

DataViewModel 里用来存放数据处理的,你的项目的一切网络请求都可以放在这里

在.h里先定义一个 RACCommand 实例 在定义一个 用来存放请求到的数据的数组


.m的实现 在这个实例的SingnalBlock初始化方法内部进行数据请求操作

DataModel里主要是一个类方法来设置属性值


DataView用来做视图类的处理

在主控制器中只有少量的代码

[[self.dataViewModel.fetchDataInfoCommand execute:nil] subscribeNext:^(id x) {

// 这里x 就是dataViewModel里返回的装有数据的数组了

}completed:^{

}] ;

之后再把数据通过DataView的实例方法传到dataView中进行显示



通过循环的方式显示 这里enumerateObjectsUsingBlock 类似for in 但是比for in效率高一些


这些只是写这个小demo的随笔,我当前公司做的项目整体用也是Reactivecocoa+ MVVM框架,以后会慢慢多写点它的用法,这里只是冰山一角。

另外目前在学习Python中,会在简书中记录自己学习的点点滴滴

工作遇到的点点滴滴
Gupao