Как связать данные между представлениями с помощью @EnviromentObject? - PullRequest
0 голосов
/ 10 июля 2020

Я практикуюсь в привязке данных с помощью @EnvironmentObject, создав простое практическое приложение. Основное представление приложения - это простой список с заголовком в каждой ячейке. Если щелкнуть ячейку, откроется подробное представление. В подробном представлении есть текстовое поле, которое может изменять заголовок ячейки в основном представлении. Я не могу понять, как связать textField с заголовком ячейки.

1 Ответ

1 голос
/ 10 июля 2020

Вы можете заменить ForEach l oop в 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()
        }
    }
}
...