【问题标题】:Value not returned when Observable changeObservable 变化时不返回值
【发布时间】:2018-12-29 06:32:53
【问题描述】:

我有一个ViewController 和三个subviews

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

预期:

如果“用户名”和“密码”字段字符大于 0,则登录按钮应“启用”。

实际:

Observables 改变了,按钮仍然被禁用。

代码:

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)
    }
}

【问题讨论】:

    标签: swift mvvm swift4 system.reactive


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多