Возможно, было бы лучше связать каждое свойство отдельно, а не целый объект UserDetail
, но если вам нужно сделать это, то вы можете попробовать что-то вроде этого в вашем контроллере вида:
// bind to view:
Observable.combineLatest(
myView.firstNameTextField.rx.text,
myView.lastNameTextField.rx.text,
myView.nickNameTextField.rx.text,
myView.emailTextField.rx.text,
myView.nationalIdTextField.rx.text,
myView.birthdayTextField.rx.text
)
.map {
let userDetail = UserDetail()
userDetail.firstName = $0
userDetail.lastName = $1
userDetail.nickName = $2
userDetail.email = $3
userDetail.nationalId = $4
userDetail.birthday = $5
return userDetail
}
.bind(to: viewModel.userDetail)
.disposed(by: disposeBag)
// bind to viewModel:
viewModel.userDetail
.map { $0.firstName }
.distinctUntilChanged() // you may consider omitting this part
.bind(to: myView.firstNameTextField.rx.text)
.disposed(by: disposeBag)
viewModel.userDetail
.map { $0.lastName }
.distinctUntilChanged()
.bind(to: myView.lastNameTextField.rx.text)
.disposed(by: disposeBag)
// ... and so on