Swift Bond中模型和viewModel的绑定

时间:2017-01-05 16:10:02

标签: swift mvvm reactive-programming reactive-cocoa reactivekit

我使用Swift Bond与viewModel进行双向视图绑定。这是通过bidirectionalBind实现的。

问题是: 将模型与viewModel绑定的常见做法是什么,更具体地说,模型如何了解viewModel中所做的更改。在ReactiveCocoa中有RACChannel来做,所以你可以绑定viewModel和model而不改变模型属性的类型。

主要目标是保持模型非常简单,只使用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???
    }
}

1 个答案:

答案 0 :(得分:2)

为了将您的ViewModelModel双向绑定在一起,您需要在Person Model内部拥有可绑定属性,这听起来像是您要避免的。无法绑定到纯Int,String或Date类型。

您可以修改Model以使用可绑定属性,也可以构建一个解决方案,使Model通过某种类型的可观察抽象与ViewModel进行交互。

biDirectionalBind通常用于将ViewModel图层中的属性与视图图层绑定,以便将用户交互中的更新传递回ViewModel,例如:

let name = Property<String>("Fred")
let textField = UITextField()
name.bidirectionalBind(to: textField.bnd_text)