我是RxSwift
的新用户,想要实现以下功能。我有一个email and password TextField
。当您在textfields
中输入文本时,应该启用一个按钮。使用RxSwift逻辑启用按钮
在我的ViewController我做了以下内容:
txtEmail.rx.text.asObservable()
.bindTo(viewModel.email)
.addDisposableTo(disposeBag)
txtPassword.rx.text.asObservable()
.bindTo(viewModel.password)
.addDisposableTo(disposeBag)
viewModel.buttonEnabled
.bindTo(btnLogin.rx.isEnabled)
.addDisposableTo(disposeBag)
这里是我的ViewModel:
import Foundation
import RxSwift
import RxCocoa
class LoginViewModel {
let email = Variable<String?>("")
let password = Variable<String?>("")
var buttonEnabled: Observable<Bool>
init() {
var processedEmail: Observable<String>!
var processedPassword: Observable<String>!
processedEmail = email.asObservable().map(String.toLower as! (String?) -> String).map(String.trimWhiteSpace as! (String?) -> String)
processedPassword = password.asObservable().map(String.toLower as! (String?) -> String).map(String.trimWhiteSpace as! (String?) -> String)
let emailValid = processedEmail.asObservable().map(String.isNotEmpty)
let passwordValid = processedPassword.asObservable().map(String.isNotEmpty)
buttonEnabled = Observable.combineLatest(emailValid, passwordValid) {
return $0 && $1
}
}
func didTapLoginButton() {
print("hello \(email.value)")
}
}
出于某种原因,我viewmodel
永远不会结束的init
方法。 有人可以帮我吗?
你是什么意思“永远不会完成”? – tomahh
@tomahh我在init方法上得到一个EXC_BAD_INSTRUCTION – Steaphann
你确定'toLower'和'trimWhiteSpace'实际上有'(String?) - > String'类型吗?这是我怀疑可能导致事故的唯一线路。 – tomahh