iOS 浅谈MVVM+RAC

学习笔记之MVVM+RAC

公司项目之前的很多年一直是用MVC框架,最近项目改版(加重构)提出了使用MVVM + RAC的框架结构,以达到各个部分模块代码之间的解耦。关于MVVM 以及RAC 还不太了解的同学请自行百度,我这里主要讲解下简单的使用。
以登录界面为例,需求如下:
- 注册用户输入手机号密码登录
- 手机号获取验证码快速登录
- 游客登录
- 第三方(QQ,微信…)登录
UI部分不多说 自定义各种textfield以及button ,主要讲下viewmodel里面的内容

@interface LoginViewModel : UIView

@property (nonatomic, assign) LoginType loginType;//各种登录类型
@property (nonatomic, strong) NSString *loginAccount;
@property (nonatomic, strong) NSString *loginPsd;
@property (assign, nonatomic) NSTimeInterval timeInterval;

/**
 登录 点击
 */
@property (nonatomic, strong) RACCommand *loginCommand;

/**
 游客登录 点击
 */
@property (nonatomic, strong) RACCommand *guestLoginCommand;

/**
 获取验证码 点击
 */
@property (nonatomic, strong) RACCommand *getCodeCommand;

/**
 验证码倒计时 变动
 */
@property (nonatomic, strong) RACSubject *codeIntervalSubject;

/**
 登录成功
 */
@property (nonatomic, strong) RACSubject *loginSuccessSubject;

/**
 第三方登录 点击
 */
@property (nonatomic, strong) RACCommand *thirdLoginCommand;

@end

VM中处理网络请求和业务逻辑 处理成功之后发一个成功的信号出去

@interface LoginViewModel()<KooHttpDelegate>

@property (weak, nonatomic) NSTimer *myTimer;//验证码倒计时

@end

@implementation LoginViewModel

#pragma mark - Setter
- (void)setTimeInterval:(NSTimeInterval)timeInterval
{
    _timeInterval = timeInterval;
    //把时间值传出 用于刷新UI
    [self.codeIntervalSubject sendNext:[NSNumber numberWithLong:_timeInterval]];

    if(_timeInterval == 0)
    {
        [self endTimer];
    }
}

#pragma mark - Getter
- (RACSubject *)loginSuccessSubject
{
    if (_loginSuccessSubject == nil)
    {
        _loginSuccessSubject = [RACSubject subject];
    }
    return _loginSuccessSubject;
}

- (RACSubject *)codeIntervalSubject
{
    if (_codeIntervalSubject == nil)
    {
        _codeIntervalSubject = [RACSubject subject];
    }
    return _codeIntervalSubject;
}

- (RACCommand *)loginCommand
{
    if (_loginCommand == nil)
    {
        @weakify(self);
        self.loginCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值