Observable 更改时不返回值
Value not returned when Observable change
我有一个 ViewController
和 3 个 subviews
:
- 用户名(文本字段)
- 密码(文本字段)
- 登录(按钮)
预计:
登录按钮应该 'enabled' 如果 'username' 和 'password' 字段字符大于 0。
实际:
Observable 已更改,按钮仍处于禁用状态。
代码:
import UIKit
import RxSwif
import RxCocoa
struct LoginViewModel {
let username = Variable<String>("")
let password = Variable<String>("")
var isValid : Observable<Bool>{
return Observable.combineLatest(username.asObservable(), password.asObservable(),
resultSelector:{ (un,pw) -> Bool in
return un.count > 0 && pw.count > 0
}
)
}
}
class LoginViewController: UIViewController {
@IBOutlet weak var tUsername : UITextField!
@IBOutlet weak var tPassword : UITextField!
@IBOutlet weak var bLogin : UIButton!
var viewModel = LoginViewModel()
var disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
self.viewModel.username.asObservable().map({[=10=] }).bind(to: self.tUsername!.rx.text).disposed(by: disposeBag)
self.viewModel.password.asObservable().map({[=10=] }).bind(to: self.tPassword!.rx.text).disposed(by: disposeBag)
self.viewModel.isValid.map({[=10=]}).bind(to: self.bLogin!.rx.isEnabled).disposed(by: disposeBag)
}
}
您以错误的方式完成了绑定,请尝试以下代码:
self.tUsername!.rx.text.map {[=10=] ?? ""}.bind(to: viewModel.username).disposed(by: disposeBag)
self.tPassword!.rx.text.map {[=10=] ?? ""}.bind(to: viewModel.password).disposed(by: disposeBag)
viewModel.isValid.bind(to: bLogin.rx.isEnabled).disposed(by: disposeBag)
我有一个 ViewController
和 3 个 subviews
:
- 用户名(文本字段)
- 密码(文本字段)
- 登录(按钮)
预计:
登录按钮应该 'enabled' 如果 'username' 和 'password' 字段字符大于 0。
实际:
Observable 已更改,按钮仍处于禁用状态。
代码:
import UIKit
import RxSwif
import RxCocoa
struct LoginViewModel {
let username = Variable<String>("")
let password = Variable<String>("")
var isValid : Observable<Bool>{
return Observable.combineLatest(username.asObservable(), password.asObservable(),
resultSelector:{ (un,pw) -> Bool in
return un.count > 0 && pw.count > 0
}
)
}
}
class LoginViewController: UIViewController {
@IBOutlet weak var tUsername : UITextField!
@IBOutlet weak var tPassword : UITextField!
@IBOutlet weak var bLogin : UIButton!
var viewModel = LoginViewModel()
var disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
self.viewModel.username.asObservable().map({[=10=] }).bind(to: self.tUsername!.rx.text).disposed(by: disposeBag)
self.viewModel.password.asObservable().map({[=10=] }).bind(to: self.tPassword!.rx.text).disposed(by: disposeBag)
self.viewModel.isValid.map({[=10=]}).bind(to: self.bLogin!.rx.isEnabled).disposed(by: disposeBag)
}
}
您以错误的方式完成了绑定,请尝试以下代码:
self.tUsername!.rx.text.map {[=10=] ?? ""}.bind(to: viewModel.username).disposed(by: disposeBag)
self.tPassword!.rx.text.map {[=10=] ?? ""}.bind(to: viewModel.password).disposed(by: disposeBag)
viewModel.isValid.bind(to: bLogin.rx.isEnabled).disposed(by: disposeBag)