我们在使用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来共享监听,避免会创建多个序列去执行输入框的监听
转载于:https://www.cnblogs.com/lidarui/p/8192387.html