iOS 利用ReactiveObjC优化登录功能

ReactiveObjC优化登录功能

目的:优化登录功能简化逻辑代码,利用信号量订阅的方式,实现根据多个输入框的位数限制登录按钮的可点击状态,并限制按钮可能出现的连续点击的情况

1.创建按钮是否可用的信号量(enableSignal),合并用户名输入框信号量(self.phoneText.rac_textSignal)和密码输入框信号量(self.pwdTextView.rac_textSignal),利用返回的(RACTuple)元组判断按钮的可用性
__weak typeof(self) weakSelf = self;
    RACSignal *enableSignal = [[RACSignal combineLatest:@[self.phoneText.rac_textSignal,self.pwdTextView.rac_textSignal]] map:^id _Nullable(RACTuple * _Nullable value) {
        return @([value[0] length] >= 11 && [value[1] length] >= 8);
    }];
2.创建命令,传入enableSignal,在点击的回调中,为订阅者发送数据,并用GCD延时一秒发送完成指令.
self.loginBtn.rac_command = [[RACCommand alloc] initWithEnabled:enableSignal signalBlock:^RACSignal * _Nonnull(id  _Nullable input) {
        return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            //发送数据
            [subscriber sendNext:nil];
            //延迟一分钟才能再次点击
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                    [subscriber sendCompleted];
                });
            return [RACDisposable disposableWithBlock:^{
                
            }];
        }];
    }];
3.订阅信号,利用按钮命令获取信号集合(executionSignals),对信号进行订阅,调用登录接口
[self.loginBtn.rac_command.executionSignals subscribeNext:^(RACSignal<id> * _Nullable x) {
        [x subscribeNext:^(id  _Nullable x) {
            //调用登录接口
            [weakSelf login];
        }];
    }];
4.监听订阅情况
[self.loginBtn.rac_command.executing subscribeNext:^(NSNumber * _Nullable x) {
            if([x boolValue]){ //正在执行!!
                NSLog(@"登录");
            }else{
                NSLog(@"结束");
            }
        }];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值