RxSwift+MVVMで出てくるサイトのコードの備忘録
RxSwift+MVVMで上位に引っかかるRealm
RxSwiftとMVVMを勉強しようとした際、上記サイトが上位にくるものの、記載されているコードを今写経してもエラーがでるのみで正常に動かなかった。
調べたり試行錯誤して動くようにできたので記録しておく。
というかほぼStackOverflow先生に答えがあったようなものだった。
動作環境
- Xcode8.3.3
- RxSwift 3.6.1
コード
// View(ViewController) import UIKit import RxCocoa import RxSwift class LoginViewController: UIViewController { @IBOutlet var usernameTextFiled: UITextField! @IBOutlet var passwordTextFiled: UITextField! @IBOutlet var confirmButton: UIButton! var viewModel = LoginViewModel() let disposeBag = DisposeBag() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. usernameTextFiled.rx.text.orEmpty.bind(to: viewModel.username).disposed(by: disposeBag) passwordTextFiled.rx.text.orEmpty.bind(to: viewModel.password).disposed(by: disposeBag) viewModel.isValid.map { $0 }.bind(to: confirmButton.rx.isEnabled).disposed(by: disposeBag) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
// ViewModel import Foundation import RxSwift struct LoginViewModel { var username = Variable<String>("") var password = Variable<String>("") var isValid: Observable<Bool> { return Observable.combineLatest(self.username.asObservable(), self.password.asObservable()) { (username, password) in return username.characters.count > 0 && password.characters.count > 0 } } }
Swift2からSwift3への移行期にもよくあったけど、RxSwiftも古い情報がひっかかりやすく、最新のVersionでの書き方がわからず四苦八苦する状態に陥っている。
参考サイト
ios - UITextField binding to ViewModel with RxSwift - Stack Overflow