Бесконечный цикл с использованием @Binding при передаче данных между представлениями

Описание высокого уровня:

Существует проблема вложенного представления, когда объект состояния передается через представления. В конце самого глубокого представления в иерархии приложение зависает, а потребление памяти постоянно увеличивается.

Вариант использования

Список партнеров → Сведения о партнере → (Список местоположений) → Сведения о местоположении

Фрагменты кода

      class PartnerViewModel: ObservableObject {
    @Published var partners: [Partner] = Partner.partners
}

Это представление загружается вTabViewиNavigationStackкомпоненты родительского класса.

      struct PartnerListView: View {
    @StateObject var viewModel = PartnerViewModel()

    var body: some View {
        List($viewModel.partners, id: \.self) { $partner in
            NavigationLink {
                PartnerDetailView(partner: $partner)
            } label: {
                Text(partner.name)
            }
        }
    }
}
      struct PartnerDetailView: View {
    @Binding var partner: Partner

    var body: some View {
        Form {
            Section("Locations") {
                List($partner.locations, id: \.self) { $location in
                    NavigationLink {
                        LocationDetailView(location: $location)
                    } label: {
                        Text(location.name)
                    }
                }
            }

        }
    }
}
      struct LocationDetailView: View {
    @Binding var location: Location
    var body: some View {
        TextField("Name", text: $location.name)
    }
}

Следующие фрагменты являются обходным путем, и он работает, но может быть временным, потому что я не понимаю, почему первая попытка не работает и почему работает эта. Я не нашел никаких ресурсов, которые могли бы привести пример этого сценария.

      struct PartnerDetailView: View {
    @Binding var partner: Partner

    var body: some View {
        Form {
            Section("Locations") {
                List($partner.locations, id: \.self) { $location in
                    NavigationLink {
                        LocationDetailView(partner: $partner, locationIndex: partner.locations.firstIndex(of: location) ?? 0)
                    } label: {
                        Text(location.name)
                    }
                }
            }

        }
    }
}
      struct LocationDetailView: View {
    @Binding var partner: Partner
    var locationIndex: Int
    
    var body: some View {
        TextField("Name", text: $partner.locations[locationIndex].name)
    }
}

Возможно ли, что я неправильно передаю значения между представлениями?

0 ответов

Другие вопросы по тегам