2017-01-05 58 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)