RxSwift Demo

感受一份RxSwift的小Demo

用户名大于五个字符隐藏用户名红色提示label,密码输入框可以使用,密码大于6个字符,隐藏密码框下的红色提示label,用户名密码输入框同时满足字符限制,登陆按钮可以使用。
关注重点在disposBag不可以使用DisposeBag()

import UIKit
import RxCocoa
import RxSwift

fileprivate let minUsernameLength = 5
fileprivate let minPasswordLength = 6

class ViewController: UIViewController {

    @IBOutlet weak var usernameTextFiled: UITextField!
    @IBOutlet weak var usernameValidLabel: UILabel!
    @IBOutlet weak var passwordTextFiled: UITextField!
    @IBOutlet weak var passwordValidLabel: UILabel!
    @IBOutlet weak var loginBtn: UIButton!
    
    var disposeBag = DisposeBag.init()

    override func viewDidLoad() {
        super.viewDidLoad()
        // usernameTextFiled.rx.text序列 - usernameVaild 序列
        let usernameVaild = usernameTextFiled.rx.text.orEmpty
            .map { (text) -> Bool in
                return text.count >= minUsernameLength
        }
        // 绑定到我们验证显示
        usernameVaild.bind(to: usernameValidLabel.rx.isHidden)
            .disposed(by: disposeBag)
        usernameVaild.bind(to: passwordTextFiled.rx.isEnabled)
            .disposed(by: disposeBag)
        
        let passwordVaild = passwordTextFiled.rx.text.orEmpty
            .map { (text) -> Bool in
                return text.count >= minPasswordLength
        }
        passwordVaild.bind(to: passwordValidLabel.rx.isHidden)
            .disposed(by: disposeBag)

        // 决定按钮 - button.rx.isenable
        Observable.combineLatest(usernameVaild,passwordVaild) { $0 && $1}
            .bind(to: loginBtn.rx.isEnabled)
            .disposed(by: disposeBag)

        //这里要注意,disposBag不可以用DisposrBag()来代替
        //因为DisposrBag()只是一个临时变量,执行一次就被销毁
        loginBtn.rx.tap.subscribe(onNext: { () in
            print("dianji")
        }).disposed(by: disposeBag)      
    }
}
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 在之前用Objective-C语言做项目的时候,我习惯性的会利用MVVM模式去架构项目,在框架Reactiv...
    Tangentw阅读 21,307评论 32 124
  • 概述 RxSwift顾名思义是Swift的一种框架,您或许曾经听说过「响应式编程」(Reactive Progra...
    Mr大喵喵阅读 5,875评论 3 4
  • 前言RxSwift的目的是让数据/事件流和异步任务能够更方便的序列化处理,能够使用Swift进行响应式编程。 本文...
    努力奔跑的小男孩阅读 5,852评论 0 3
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,721评论 0 17
  • 为了孩子上学方便,最近一直忙着找房子,最终找到了,房租比自己想象的高很多,收拾东西,打扫房间,总觉得心里乱乱的,烦...
    飞飞来啦阅读 1,404评论 0 1