什么是MVVM

      希望于Apple已经很好地测试过它的业务逻辑了。剩下的视图控制器它很少进行单元测试。

      当新的数据到达时,model会通知ViewController(通常是通过键-值观察(KVO)的方式),然后ViewController会更新View。当View接收交互时,ViewController会更新Model。

      MVVM将大量的类似上面的业务逻辑从viewController中抽离出来了。

    MVVM_high_level

      在MVVM中,我们趋向于将view和view controller作为一个整体(这也解释了为什么不称它为MVVCVM),新的viewModel代替原来的viewController协调view与model之间的交互。

      ReactiveCocoa将会监控数据模型(model)的变化,并将这个变化映射到视图模型(viewModel)的属性上,执行任意必要的业务逻辑。

      举一个具体的例子:假设我们的模型包含一个“日期”(用表示),我们想要监控这个“日期”的变化,来更新我们视图模型(viewModel)的属性dateAdded.模型(model)的属性是一个NSDate的实例,但视图模型(viewModel)中对应的属性是从它转换过来的。这种绑定看起来跟下面的代码类似(在viewModel的初始化方法中进行):

      dateFormatter是ViewModel的一个类方法,它缓存了一个NSDateFormatter实例以便复用(创建NSDateFormatter代价昂贵)。
    接下来,view controller 可以监控viewModel的属性将它跟一个label进行绑定。

    1. RAC(self.label, text) = RACObserve(self.viewModel, dateAdded);