Значение не возвращается при заметном изменении - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть один ViewController с 3 subviews:

  • имя пользователя (TextField)
  • пароль (TextField)
  • логин (кнопка)

Ожидается:

Кнопка входа должна быть включена, если символы поля 'username' dan 'password' больше 0.

Actual:

Наблюдаемые объекты изменены, кнопка по-прежнему отключена.

Код:

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

1 Ответ

0 голосов
/ 29 декабря 2018

Вы неправильно связались, попробуйте следующий код:

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