MVVM与RxSwift实践
2017-10-09 本文已影响665人
Cocoaleeo
按照国际惯例先来安利几篇文章
- ios架构模式 - 简述 MVC,MVP,MVVM 和 VIPER
-
干货集中营-ReactiveCocoa+RXSwift+MVVM
这篇文章汇总几乎覆盖了所有RAC和RX从基础到实践的内容。 -
iOS 保持界面流畅的技巧
这篇文章是YYKit作者对如何提升页面滑动流畅度非常详尽的解答,想必很多人都有看过!
最近在学习 Swift 和 RxSwift,但是看了许多文章,似乎并没有很多可以参考的项目,有一些也属于Swift2 的demo,所以结合自己的理解做了个小项目,在此分享出来,旨在与各位互相交流学习,能力有限,如果其中有失误或错误还请各位多多指正!
1. 什么是MVVM
简单来说,MVVM是MVC的升级,通过VM将Controller中复杂的逻辑层进行分离,达到Controller瘦身、代码分离、便于测试等目的,所以又可以被称为MVCVM,有些同学会这样理解:哦,就是多了个VM!这个怎么说呢,不能说你错,但是会有种搞笑的效果,因为在MVVM和MVC实际上可以说是两种思想,MVC下的思路是顺叙,请求-数据-展示,但MVVM下则有点像逆叙,你需要先想好拿到数据做的事情(Binding),然后才进行数据请求等操作。更详细的解释可以看上文中推荐的文章,借两张图帮助大家理解一下!
MVC MVVM2. 实践内容
仿 Cineast 项目,Demo地址 https://github.com/ChinaBanana/FancyMovie
- API
-
项目结构
image.png- APPDelegate 无需多说
- RootViewController 继承自TabBarController,包含Sections下的三个部分
- General中东西略杂:APIService 所有的网络请求都在此文件中实现,NavigatorService 实现页面之间的跳转,其他的为工具类
- Marco中只有一个文件,定义了一些常用的东东
- Sections中每个部分都包含Models,ViewControllers,ViewModels和Views四个部分。
可能有同学会刚到疑惑,Service是什么东西,Service可以看做是对ViewModel的进一步封装,举个列子:当调用某个网络请求时,返回的数据可能涉及到多个UI,这时候如果只放在单个UI的VM中时,要刷新多个UI界面逻辑上似乎有点混乱,而把网络请求放到service中后,只要VM发出请求,Service实现请求,各个UI界面对Service进行订阅操作即可刷新UI界面,这样逻辑更加清晰,代码也更加整洁!
-
第三方
image.png- Alamofire Moya 网络请求库
- Kingfisher 网络图片加载库
- RxSwift,RxCocoa
- SnapKit 布局工具
- youtube-ios-player-helper YouTube开发者平台视频播放工具,看上去高大上使用起来非常简单的视频播放器。
- 截图,找不同
image.png
3. 最后 To do list
- 还有一部分功能尚未完成
- 项目中使用了很多Subject,Subject在Rx和RAC中都是一个非常强大的工具,但这里似乎有点滥用了,在实现绑定上似乎有更优雅的方式,有了解的大大欢迎给出指导建议!