【问题标题】:RxSwift: Two way bindingRxSwift:两种方式绑定
【发布时间】:2017-09-05 11:45:58
【问题描述】:

我用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 &lt;-&gt; object.property).addDisposableTo(disposeBag)

属性定义:var property = Variable&lt;String?&gt;(nil)

  1. 在 onNext 方法中一切正常,variable 更改了它的值,但我的 object.property 没有更改。
  2. 有没有办法在 方法中将变量当前值设置到 ControlProperty 中,因为我需要在订阅开始之前设置初始值?

【问题讨论】:

    标签: ios swift data-binding rx-swift


    【解决方案1】:

    在 Swift 4 中工作


    使用 MVVM 架构的字符串和文本字段之间的双向绑定示例:

    • 在 ViewController 中:

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

    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)
    

    【讨论】:

      【解决方案2】:

      我的错。绑定后我用另一个实例替换了对象

      此代码运行良好,控制属性从变量接收初始值

      【讨论】:

        猜你喜欢
        • 2016-09-26
        • 1970-01-01
        • 2021-10-08
        • 2016-02-27
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 2017-01-03
        • 2018-12-09
        相关资源
        最近更新 更多