绑定变量时的 RxSwift 初始值
RxSwift initial value when binding a Variable
我有以下代码:
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
的 init
方法中设置的值开始。
我可以在绑定之前做 textView.text = viewModel.text.value
,但是因为我使用的是 RxSwift,所以我想了解这里的通常做法是什么。
没错,这是单向绑定,您必须手动设置文本视图的初始值。
如果你想要双向绑定,看看下面的代码:
RxSwift: Two way binding
请务必在您的项目中导入 Operators.swift 文件 (https://github.com/ReactiveX/RxSwift/blob/master/RxExample/RxExample/Operators.swift)
请注意,变量类型必须是 Variable<String?>
,因为文本在 UIKit 中是一个可选的字符串。
我有以下代码:
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
的 init
方法中设置的值开始。
我可以在绑定之前做 textView.text = viewModel.text.value
,但是因为我使用的是 RxSwift,所以我想了解这里的通常做法是什么。
没错,这是单向绑定,您必须手动设置文本视图的初始值。 如果你想要双向绑定,看看下面的代码:
RxSwift: Two way binding
请务必在您的项目中导入 Operators.swift 文件 (https://github.com/ReactiveX/RxSwift/blob/master/RxExample/RxExample/Operators.swift)
请注意,变量类型必须是 Variable<String?>
,因为文本在 UIKit 中是一个可选的字符串。