1.介绍MVVM架构思想。
2.1 程序为什么要架构:便于程序员开发和维护代码。
2.2 常见的架构思想:
-
MVC
M:模型 V:视图 C:控制器 -
MVVM
M:模型 V:视图+控制器 VM:视图模型 -
MVCS
M:模型 V:视图 C:控制器 C:服务类 -
VIPER
V:视图 I:交互器 P:展示器 E:实体 R:路由 (http://www.cocoachina.com/ios/20140703/9016.html)
2.3 MVVM介绍
-
模型
(M):保存视图数据。 -
视图+控制器
(V):展示内容 + 如何展示 -
视图模型
(VM):处理展示的业务逻辑,包括视图事件的处理,数据的请求和解析等等。
通过绑定和信号将V和VM连接起来。
每个控制器对应一个VM模型。VM里面最好不要包括V。事件都封装到RACCommand处理。
控制器内获取RACCommand数据
RACSignal *si = [self.loginVM.loginCommand execute:@"执行1"];
[si subscribeNext:^(id _Nullable x) {
NSLog(@"获取到00%@",x);
}];
VM内获取RACCommand数据
[_loginCommand.executionSignals.switchToLatest subscribeNext:^(id _Nullable x) {
NSLog(@"获取到数据-----%@",x);
}];
3.ReactiveCocoa + MVVM 实战一:登录界面
- 3.1需求+分析+步骤
处理事件:使用RACCommand
/* 需求:1.监听两个文本框的内容,有内容才允许按钮点击
2.默认登录请求.
用MVVM:实现,之前界面的所有业务逻辑
分析:1.之前界面的所有业务逻辑都交给控制器做处理
2.在MVVM架构中把控制器的业务全部搬去VM模型,也就是每个控制器对应一个VM模型.
步骤:1.创建LoginViewModel类,处理登录界面业务逻辑.
2.这个类里面应该保存着账号的信息,创建一个账号Account模型
3.LoginViewModel应该保存着账号信息Account模型。
4.需要时刻监听Account模型中的账号和密码的改变,怎么监听?
5.在非RAC开发中,都是习惯赋值,在RAC开发中,需要改变开发思维,由赋值转变为绑定,可以在一开始初始化的时候,就给Account模型中的属性绑定,并不需要重写set方法。
6.每次Account模型的值改变,就需要判断按钮能否点击,在VM模型中做处理,给外界提供一个能否点击按钮的信号.
7.这个登录信号需要判断Account中账号和密码是否有值,用KVO监听这两个值的改变,把他们聚合成登录信号.
8.监听按钮的点击,由VM处理,应该给VM声明一个RACCommand,专门处理登录业务逻辑