我是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