zoukankan      html  css  js  c++  java
  • 使用RxSwift 实现登录页面的条件绑定

    我们在使用MVC建构进行开发时,对登录页面用户名密码等进行的处理一般是这样的,点击登录按钮判断用户框以及密码框输入的合法性,用一堆if真是屎一般!或者用textfield的代理来进行响应其实也是屎一般!

    有了RxSwift,我们的响应式又多了一种可能!

            let usernameValid = user_nameTextField.rx.text
                .map{($0?.characters.count)! >= minUsernameLength && ($0?.characters.count)! <= maxUsernameLength }  //map函数 对text进行处理
                .shareReplay(1)
            
            let passwordValid = secertTextFiled.rx.text
                .map{($0?.characters.count)! >= minPasswordLength && ($0?.characters.count)! < maxPasswordLength }  //map函数 对text进行处理
                .shareReplay(1)
            
            //
            let everythingValid = Observable.combineLatest(usernameValid, passwordValid) { (usernameValid, passwordValid) -> Bool in
                usernameValid && passwordValid
            }
            
            usernameValid
                .bindTo(usernameLabel.rx.isHidden)   //username通过验证,usernameLB警告消失
                .addDisposableTo(disposBag)
            passwordValid
                .bindTo(secertLable.rx.isHidden)
                .addDisposableTo(disposBag)
            
            usernameValid
                .bind(to: secertTextFiled.rx.isEnabled)  //username通过验证,passwordTF才可以输入
                .addDisposableTo(disposBag)
    
    
            
            everythingValid
                .bind(to: loginbtn.rx.isEnabled)   // 用户名密码都通过验证,才可以点击按钮
                .addDisposableTo(disposBag)
            
            everythingValid.bind { [weak self](isenabled) in
                if isenabled{
                    self?.loginbtn.backgroundColor = .red
                }else{
                    self?.loginbtn.backgroundColor = .gray
                }
            }.addDisposableTo(disposBag)
            
    
            loginbtn.rx.tap  //绑定button点击事件
                .bind { [weak self] in
                    self?.showAlert()
                }
                .addDisposableTo(disposBag)

    以上代码很好理解,我们用到了shareReply来共享监听,避免会创建多个序列去执行输入框的监听

  • 相关阅读:
    出错处理函数abort、exit、atexit、strerror. . .
    linux查询系统信息命令
    [转载]比google和百度强十倍的搜索类网站
    陶  朱  商  经
    ip的划分,超详细.【网管常识】
    linux的hostname修改详解
    勤于寻找谈话资料
    Windows常用命令集
    C语言中printf格式
    How to disable SELinux
  • 原文地址:https://www.cnblogs.com/lidarui/p/8192387.html
Copyright © 2011-2022 走看看