iOS-MVVM与RAC

本文介绍了MVVM架构思想,并通过两个实战案例——登录界面和网络请求数据,详细阐述了如何在iOS开发中结合ReactiveCocoa进行应用。在MVVM模式下,模型负责保存视图数据,视图展示内容并处理展示逻辑,而视图模型处理事件和数据请求。使用ReactiveCocoa的RACCommand来处理事件和网络请求,实现控制器与视图模型的解耦。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,专门处理登录业务逻辑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力修福报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值