【问题标题】:RxSwift initial value when binding a Variable绑定变量时的 RxSwift 初始值
【发布时间】:2017-10-14 00:23:26
【问题描述】:

我有以下代码:

import RxSwift
import RxCocoa

class ViewModel {

    var text = Variable<String>("")

    init() {
        text.value = "hello"
    }

}

class ViewController: UIViewController {
    @IBOutlet weak var textView: UITextView!
    @IBOutlet weak var counterLabel: UILabel!

    var viewModel = ViewModel()

    let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()

        textView.rx.text
            .orEmpty
            .debug()
            .bind(to: viewModel.text)
            .disposed(by: disposeBag)
    }
}

绑定工作正常(当我更改UITextView 时,它会正确更新viewModel。但是,由于绑定是单向的(或者我理解),textView 不会以我设置的值开头在ViewModelinit 方法中。

我可以在绑定之前做textView.text = viewModel.text.value,但由于我使用的是 RxSwift,我想了解这里的通常做法是什么。

【问题讨论】:

    标签: ios swift rx-swift


    【解决方案1】:

    您是对的,这是一个单向绑定,您必须手动设置文本视图的初始值。 如果你想要双向绑定,看看下面的代码:

    RxSwift: Two way binding

    请务必在您的项目中导入 Operators.swift 文件 (https://github.com/ReactiveX/RxSwift/blob/master/RxExample/RxExample/Operators.swift)

    注意变量类型必须是Variable&lt;String?&gt;,因为文本是UIKit中的可选字符串。

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 1970-01-01
      • 2014-08-27
      • 2012-05-04
      • 2010-10-07
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 2012-10-09
      相关资源
      最近更新 更多