2

Я использую Swift Bond для двусторонней привязки вида с viewModel. Это достигается двунаправленным действием.Связывание модели и viewModel в Swift Bond

Вопрос: Что такое обычная практика связывания модели с viewModel и, более конкретно, как модель будет знать об изменениях, сделанных в viewModel. В ReactiveCocoa для этого есть RACChannel, поэтому вы можете связывать viewModel и модель без изменения типов свойств модели.

Основная цель - сохранить модель очень простой, используя только примитивные типы, такие как String, Int, Date и Move Observable и типы свойств для просмотраModel.

Иллюстрация:

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

Для двунаправленного связать свой ViewModel и модель вместе, вы должны будете иметь связываемое свойство внутри вашей личность модели, которые это звучит, как вы хотите, чтобы избежать. Невозможно привязать к чистым типам Int, String или Date.

Вы можете либо изменить свою Модель, чтобы использовать связанные свойства, либо вы могли бы написать решение, в котором ваши модели взаимодействуют с вашей ViewModel через некоторый тип наблюдаемой абстракции.

biDirectionalBind обычно используется для связывания свойств в вашем ViewModel слое с видом слоя для того, чтобы передать обновления от взаимодействия пользователя обратно в ViewModel, например:

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

Смежные вопросы