Използвам Swift Bond за двупосочно свързване на изглед с viewModel. Това се постига чрез двупосочна връзка.
Въпросът е: Каква е обичайната практика на свързване на модел с viewModel и по-конкретно как би моделът да знае за промените, направени в viewModel. В ReactiveCocoa има RACChannel, за да направите това, така че можете да обвържете viewModel и model, без да променяте свойствата на модела.
Основната цел е да се запази моделът много прост само с примитивни типове като String, Int, Date и да се движат Observable и Property типове, за да видите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 за отговор № 1За да свържете двупосочно ViewModel
и Model
заедно ще трябва да притежавате обвързващи свойства вътре във вашата Person
Model
което звучи като искате да избегнете. Не е възможно да се свържете с чист тип Int, String или Date.
Можеш или да модифицираш Model
да използвате bindable свойства, или бихте могли да създадете решение, в което Model
взаимодейства с вашия ViewModel
чрез някакъв вид наблюдавана абстракция.
biDirectionalBind
обикновено се използва за свързване на свойствата във вашия ViewModel
слой с View Layer, за да предадете актуализациите от взаимодействията на потребителя обратно към ViewModel
, например:
let name = Property<String>("Fred")
let textField = UITextField()
name.bidirectionalBind(to: textField.bnd_text)