из индекса, когда я пытаюсь удалить одну строку в списке с помощью навигационной ссылки - PullRequest
0 голосов
/ 05 марта 2020
    struct PocketListView: View {
    @EnvironmentObject var pocket:Pocket
    var body: some View {
        NavigationView{
            List{
                ForEach(self.pocket.moneyList.indices,id: \.self){index in
                    NavigationLink(destination:  MoneyView(money: self.$pocket.moneyList[index])){
                        MoneyNoTouchView(money: self.$pocket.moneyList[index])
                    }


                }.onDelete(perform: {index in
                    self.pocket.moneyList.remove(at: index.first!)
                })
                Spacer()
                HStack{
                    Image(systemName: "plus")
                        .onTapGesture {
                            self.pocket.add()
                    }
                }

            }
        }

    }
}


    struct Money {
    var id = UUID()
    var value = 0
}

    class Pocket: ObservableObject,Identifiable {
        @Published var id = UUID()
        @Published var moneyList = [Money]()

        func add() {
            self.moneyList.append(Money())
            print(moneyList.count)
        }
    }

Когда я пытаюсь удалить любую строку, приложение обработает sh, и я получаю это «Неустранимая ошибка: индекс выходит за пределы диапазона». Если я удаляю часть NavigationLink в своем коде, будет нормально удалить любую строку. Как я могу решить это? Спасибо.

1 Ответ

1 голос
/ 05 марта 2020

спасибо за ваш код.

Мне пришлось изменить / расширить несколько вещей, потому что до сих пор не хватает некоторого кода для компиляции вашего примера, но мой код работает .... возможно, это поможет вам

import SwiftUI


struct A : View {

    var body: some View {
        Text("a")
    }
}

struct ContentView: View {
    @EnvironmentObject var pocket:Pocket
    var body: some View {
        NavigationView{
            List{
                ForEach(self.pocket.moneyList.indices,id: \.self) { index in
                    NavigationLink(destination: A()){
                        Text("\(self.pocket.moneyList[index].value)")
                    }


                }.onDelete(perform: {index in
                    self.pocket.moneyList.remove(at: index.first!)
                })
                Spacer()
                HStack{
                    Image(systemName: "plus")
                        .onTapGesture {
                            self.pocket.add()
                    }
                }
            }
        }
    }
}


struct Money {
    var id = UUID()
    var value = 0
}

class Pocket: ObservableObject,Identifiable {
    @Published var id = UUID()
    @Published var moneyList = [Money]()

    func add() {
        self.moneyList.append(Money())
        print(moneyList.count)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {

        var pocket = Pocket()
        pocket.moneyList.append(Money(id: UUID(), value: 1))
        pocket.moneyList.append(Money(id: UUID(), value: 2))
        pocket.moneyList.append(Money(id: UUID(), value: 3))

        return ContentView().environmentObject(Pocket())
    }
}
...