一次简单的ReactiveCocoa+MVVM的实践

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

      两年多的工作经验,从最初写代码什么东西都往控制器里写导致一个稍微大点的项目里随处可见容纳上千行代码的控制器,到为了提高运行效率而使用的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中,会在简书中记录自己学习的点点滴滴

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,476评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,251评论 4 61
  • 我不是一个拖延症重度患者,顶多算有时偷个懒,可是急性子的人遇到拖延症患者,真的恨不得所有事都可以自己完成【原来急性...
    黄家小妞阅读 574评论 0 0
  • 超级IP的生存模式一定是摒弃了物质论,而是建立在关系论之上的。这是对传统商业模式的突破,超级IP的实质不再是...
    GTR001阅读 268评论 0 0
  • 罗平–昆明–丙中洛–独龙江–大理
    书天堂阅读 399评论 1 1