关于ReactiveCocoa
在我看来RAC完全颠覆了传统的开发模式,使消息传递回调等机制复杂问题简单化,初始化与回调放在一起,使整个逻辑很具条理化。
ReactiveCocoa结合了一些编程模式:
1.函数式编程:利用高阶函数,即将函数作为其它函数的参数。
2.响应式编程:关注于数据流及变化的传播。
基于以上两点,ReactiveCocoa被当成是函数响应编程(Functional Reactive Programming, FRP)框架。
Github地址https://github.com/ReactiveCocoa/ReactiveCocoa
关于MVVM
在MVVM中View和ViewController正式联系在一起。View仍然不能直接引用模型Model,当然Controller也不能。 相反他们引用视图模型ViewModel。 ViewModel是一个放置用户输入验证逻辑,视图显示逻辑,发起网络请求和其他各种各样代码的好地方。 ViewModel不要引用UIKit。 展示逻辑放在了ViewModel中,比如Model的值映射到一个格式化字符串。实际上就是把原来ViewController做的一些事情放到了ViewModel中进行,为ViewController减负。
在我看来,使用架构的时候要考虑到页面的复杂情况,不要为了架构而去架构。比如页面逻辑比较简单,只是现实一个列表的逻辑,MVC就足矣。没必要使用相对复杂的逻辑如MVVM或MVP。
关于MVVM+RAC
- ReactiveCocoa所扮演的角色:进行ViewModel连接"粘合"工作。
1.例如在ViewController中给ViewModel的某个属性绑定信号,实时监听属性的变化。每当属性发生变化,ViewModel中就会发生一个信号出来,ViewController中对应的属性订阅这个信号,在订阅到这个信号的回调中执行后面的逻辑。
2.利用RACCommand执行execute方法来返回一个signal,订阅这个signal,这个signal中可以利用 initWithSignalBlock方法返回一个经过处理的signal,比如要把网络请求的数据返回并且解析成模型数组,都可以放在这个block中进行处理。
实践笔记
我在我的Github中写了一个demo,其中基本涵盖了RAC的基础用法以及RAC+MVVM的实际应用。希望感兴趣的童鞋可以star一下,鼓励一下。MVVM+RAC DEMO
参考链接
http://www.raywenderlich.com/62699/reactivecocoa-tutorial-pt1
http://www.raywenderlich.com/74106/mvvm-tutorial-with-reactivecocoa-part-1
http://www.jianshu.com/p/e10e5ca413b7