Привязка модели и viewModel в Swift Bond


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

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

Основная цель состоит в том, чтобы сохранить модель очень простой только с примитивными типами, такими как String, Int, дата и перемещение типов 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 2

1 ответ:

Для того, чтобы двунаправленно связать ваши ViewModel и Model вместе, вам нужно будет иметь связываемые свойства внутри вашего Person Model чего, похоже, ты хочешь избежать. Это не возможно, чтобы привязать к себе чистый Инт, строки или даты.

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

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

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