Привязка модели и 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 ответ:
Для того, чтобы двунаправленно связать ваши
Вы можете либо изменить свойViewModelиModelвместе, вам нужно будет иметь связываемые свойства внутри вашегоPersonModelчего, похоже, ты хочешь избежать. Это не возможно, чтобы привязать к себе чистый Инт, строки или даты.Model, чтобы использовать связываемые свойства, либо создать решение, в котором вашModelвзаимодействует с вашимViewModelчерез некоторый тип наблюдаемой абстракции.
biDirectionalBindобычно используется для связывания свойств в ваш слойViewModelсо слоем View для передачи обновлений из взаимодействий пользователя обратно вViewModel, например:let name = Property<String>("Fred") let textField = UITextField() name.bidirectionalBind(to: textField.bnd_text)