我正在使用 Swift Bond 进行 View 与 viewModel 的双向绑定(bind)。这是通过双向Bind 实现的。
问题是: 将模型与 viewModel 绑定(bind)的常见做法是什么,更具体地说,模型如何了解 viewModel 中所做的更改。在ReactiveCocoa中,有RACChannel可以做到这一点,因此您可以绑定(bind)viewModel和模型,而无需更改模型属性的类型。
主要目标是保持模型非常简单,仅使用 String、Int、Date 等基本类型,并将 Observable 和 Property 类型移至 viewModel。
插图:
import Bond
import ReactiveKit
struct Person {
var name: String
var age: Int
var birthdate: Date
}
struct PersonViewModel {
fileprivate var person: Person
var name: Observable<String>
var age: Observable<Int>
var birthDate: Observable<Date>
init(person: Person) {
self.person = person
// what should go here in order to bind properties???
}
}
最佳答案
为了将您的 ViewModel
和 Model
双向绑定(bind)在一起,您需要在您的 Person
Model
听起来你想避免。无法绑定(bind)到纯 Int、String 或 Date 类型。
您可以修改您的 Model
以使用可绑定(bind)属性,或者您可以构建一个解决方案,让您的 Model
通过某些方式与您的 ViewModel
交互可观察的抽象类型。
biDirectionalBind
通常用于将 ViewModel
层中的属性与 View 层绑定(bind),以便将来自用户交互的更新传递回 ViewModel
,例如:
let name = Property<String>("Fred")
let textField = UITextField()
name.bidirectionalBind(to: textField.bnd_text)
关于swift - Swift Bond 中 model 和 viewModel 的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41489609/