gpt4 book ai didi

swift - Observable 更改时不返回值

转载 作者:行者123 更新时间:2023-11-28 07:33:30 24 4
gpt4 key购买 nike

我有一个 ViewController 和 3 个 subviews :

  • 用户名(文本字段)
  • 密码(文本字段)
  • 登录(按钮)

预期:

如果“用户名”和“密码”字段字符大于 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({$0 }).bind(to: self.tUsername!.rx.text).disposed(by: disposeBag)
self.viewModel.password.asObservable().map({$0 }).bind(to: self.tPassword!.rx.text).disposed(by: disposeBag)

self.viewModel.isValid.map({$0}).bind(to: self.bLogin!.rx.isEnabled).disposed(by: disposeBag)
}
}

最佳答案

您以错误的方式完成了绑定(bind),请尝试以下代码:

self.tUsername!.rx.text.map {$0 ?? ""}.bind(to: viewModel.username).disposed(by: disposeBag)
self.tPassword!.rx.text.map {$0 ?? ""}.bind(to: viewModel.password).disposed(by: disposeBag)

viewModel.isValid.bind(to: bLogin.rx.isEnabled).disposed(by: disposeBag)

关于swift - Observable 更改时不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53967278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com