绑定变量时的RxSwift初始值

时间:2017-10-14 00:23:26

标签: ios swift rx-swift

我有以下代码:

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不会从我在ViewModel的{​​{1}}方法中设置的值开始。

我可以在绑定之前做init,但由于我正在使用RxSwift,我想了解这里的惯常做法。

1 个答案:

答案 0 :(得分:5)

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

RxSwift: Two way binding

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

请注意,Variable类型必须是Variable<String?>,因为text是UIKit中的可选String。