RxSwift: Two way binding

给你一囗甜甜゛ 提交于 2019-12-05 06:48:29

问题


I used official two-way-binding solution

func <-> <T>(property: ControlProperty<T>, variable: Variable<T>) -> Disposable{
let bindToUIDisposable = variable.asObservable()
    .bindTo(property)

let bindToVariable = property
    .subscribe(onNext: { n in
        variable.value = n
    }, onCompleted:  {
        bindToUIDisposable.dispose()
    })

return Disposables.create(bindToUIDisposable, bindToVariable)
}

Usage: (textField.rx.text <-> object.property).addDisposableTo(disposeBag)

Property definition: var property = Variable<String?>(nil)

  1. In onNext method all ok and variable changed its value, but my object.property doesn't changed.
  2. Is there any way to set variable current value into ControlProperty inside of <-> method, bcs I need set initial value, before subscribe starts?

回答1:


My fault. I replaced object with another instance after binding

This code works well and control property receive initial value from variable




回答2:


Working in Swift 4


Example of two way binding between String & Textfield with MVVM architecture:

  • In ViewController:

 @IBOutlet weak var emailTextfield: UITextField!
 var viewModel : CCRegisterViewModel?
  • In ViewModel:

var email = Variable<String>("")
  • Use this code in ViewController

viewModel?.email.asObservable()
.bind(to: emailTextfield.rx.text)
.disposed(by: disposeBag)

emailTextfield.rx.text.orEmpty.bind(to:viewModel!.email)
.disposed(by: disposeBag)


来源:https://stackoverflow.com/questions/43323049/rxswift-two-way-binding

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!