MVVM与RxSwift实践

按照国际惯例先来安利几篇文章
  • 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),然后才进行数据请求等操作。更详细的解释可以看上文中推荐的文章,借两张图帮助大家理解一下!

MVVM与RxSwift实践_第1张图片
MVC
MVVM与RxSwift实践_第2张图片
MVVM
2. 实践内容

仿 Cineast 项目,Demo地址 https://github.com/ChinaBanana/FancyMovie

  • API
  • 项目结构


    MVVM与RxSwift实践_第3张图片
    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界面,这样逻辑更加清晰,代码也更加整洁!

  • 第三方


    MVVM与RxSwift实践_第4张图片
    image.png
    • Alamofire Moya 网络请求库
    • Kingfisher 网络图片加载库
    • RxSwift,RxCocoa
    • SnapKit 布局工具
    • youtube-ios-player-helper YouTube开发者平台视频播放工具,看上去高大上使用起来非常简单的视频播放器。
  • 截图,找不同
MVVM与RxSwift实践_第5张图片
image.png

MVVM与RxSwift实践_第6张图片
image.png
3. 最后 To do list
  • 还有一部分功能尚未完成
  • 项目中使用了很多Subject,Subject在Rx和RAC中都是一个非常强大的工具,但这里似乎有点滥用了,在实现绑定上似乎有更优雅的方式,有了解的大大欢迎给出指导建议!

你可能感兴趣的:(MVVM与RxSwift实践)