Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RxSwift: Two way binding

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?
like image 314
Viktor Avatar asked Feb 14 '26 06:02

Viktor


1 Answers

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)
like image 172
Pablo Blanco Avatar answered Feb 16 '26 19:02

Pablo Blanco



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!