2017-01-05 53 views
2

我正在使用Swift Bond与viewModel进行视图的双向绑定。这是通过双向绑定实现的。在Swift Bond中绑定model和viewModel

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

主要目标是保持模型非常简单,只有基本类型如String,Int,Date和move Observable和Property types to 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??? 
    } 
} 

回答

2

为双向绑定您的视图模型和模型一起,你需要有一个像你想避免听上去你的角色模型的内部绑定属性。无法绑定到纯粹的Int,String或Date类型。

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

biDirectionalBind通常用于绑定与视图层的视图模型层特性,以便通过从用户的交互回视图模型的更新,例如:

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