我用了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)
}
用法:(textField.rx.text <-> object.property).addDisposableTo(disposeBag)
属性定义:var property = Variable<String?>(nil)
- 在 onNext 方法中一切正常并且
variable
改变了它的值(value),但我的object.property
没有改变。 - 有什么方法可以在 <-> 方法内将变量当前值设置到 ControlProperty 中,因为我需要在订阅开始之前设置初始值?
最佳答案
在 Swift 4 中工作
String 和 Textfield 与 MVVM 架构的双向绑定(bind)示例:
- 在 View Controller 中:
@IBOutlet weak var emailTextfield: UITextField!
var viewModel : CCRegisterViewModel?
- 在 View 模型中:
var email = Variable<String>("")
- 在 ViewController 中使用此代码
viewModel?.email.asObservable()
.bind(to: emailTextfield.rx.text)
.disposed(by: disposeBag)
emailTextfield.rx.text.orEmpty.bind(to:viewModel!.email)
.disposed(by: disposeBag)
关于ios - Rx swift : Two way binding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43323049/