Как связать данные между представлениями с помощью @EnviromentObject?
Я практикуюсь в привязке данных с помощью @EnvironmentObject, создав простое практическое приложение. Основное представление приложения - это простой список с заголовком в каждой ячейке. Если щелкнуть ячейку, откроется подробное представление. В подробном представлении есть текстовое поле, которое может изменять заголовок ячейки в основном представлении. Я не могу понять, как связать textField с заголовком ячейки.
1 ответ
Решение
Вы можете заменить свой ForEach
петля в ContentView
с участием:
// iterate through indices of the `store.items` array
ForEach(0..<store.items.count, id:\.self) { index in
// pass the `index` to the `DetailView`
NavigationLink(destination: DetailView(index: index)) {
Text(self.store.items[index].title)
}
}
Затем используйте index
в DetailView
для доступа к привязке из @EnvironmentObject
:
struct DetailView: View {
@EnvironmentObject var store: CPStore
// item index
let index: Int
var body: some View {
VStack {
// now you can access the item binding
TextField("New title", text: $store.items[index].title)
.padding(5)
.frame(height: 50)
.overlay(Rectangle().stroke(Color.gray, lineWidth: 2))
Spacer()
}
}
}