SwiftUI - изменить модель из вложенных подвидов
У меня есть LazyVStack, представляющий ячейки. В моем основном представлении, в котором есть LazyVStack, есть viewModel.
@StateObject private var model = ViewModel()
Стек представляет список CustomViews.
LazyVStack {
ForEach(model.items) { item in
CustomView(item: item)
}
}
Каждое настраиваемое представление состоит из двух других подпредставлений, CustomView1 и CustomView2. CustomView2 имеет кнопку, где я хочу перевернуть ячейку onTap.
Однако в этот момент в моих пользовательских представлениях появилась новая копия этих элементов (структура). Как лучше всего указать на модель для достижения:
.onTapGesture {
model.flipItem(item)
}
- Каким-то образом несколько переменных @Binding - это вариант?
- Делать общий синглтон ViewModel для облегчения доступа?
- Лучший вариант?
1 ответ
Я бы добавил недвижимость внутри вашего
Item
структура, которая хранит, перевернута карта или нет:
struct Item {
var ifFlipped = false
...
}
model.items = [Item(), Item()]
Затем перебрать
model.items.indices
, так что вы можете получить
Binding
:
LazyVStack {
ForEach(model.items.indices, id: \.self) { index in
CustomView(item: $model.items[index]) /// this will be a Binding<Item>
}
}
И ваш
CustomView
/
CustomView1
должен будет выглядеть примерно так.
struct CustomView: View {
@Binding var item: Item
var body: some View {
CustomView1(item: $item) /// pass Binding down
}
}
struct CustomView1: View {
@Binding var item: Item
var body: some View {
Text("Hi")
.onTapGesture {
item.isFlipped.toggle()
}
}
}