Как передать индекс массива ForEach через NavigationLink в другой ForEach без сбоев? - PullRequest
1 голос
/ 12 июля 2020

У меня есть странная проблема, когда она сработает, если я подожду две секунды и нажму NavigationLink, но если я попытаюсь нажать ее раньше, sh приложение сработает, я не уверен, что я делаю не так. Все, что я хочу сделать, это получить индекс массива из первого ForEach, чтобы использовать его для другого ForEach l oop.

В первой структуре я объявил эти

@ObservedObject var vm = TripViewModel()

с l oop выглядит так. Я убедился, что с помощью print и Text на этикетке действительно получает индекс массива, что он и делает.

                    ForEach(vm.TripData.indices, id: \.self) { trip in
                    
                    NavigationLink(
                        destination: TripView(tripCount: trip),
                        label: {
                            TableRow()
                            Text("\(trip)")
                        }
                    )
                    
                }

А во второй структуре они объявлены

  @ObservedObject var vm = TripViewModel()
    var tripCount: Int = 0

с ForEach на основе индекса предыдущих циклов.

ForEach(vm.TripData[tripCount].Leg, id: \.self) { day in

Именно здесь я получаю ошибку cra sh « Поток 1: Неустранимая ошибка: Индекс вне допустимого диапазона"

1 Ответ

0 голосов
/ 13 июля 2020

Первоначально TripData имеет count = 0, и вы пытаетесь получить доступ к его первому элементу с нулевым индексом, который в то время не существует, поэтому cra sh, вам нужно изменить его на

ForEach(vm.TripData.isEmpty ? [] : vm.TripData[tripCount].Leg, id: \.self) { day in
...