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