列表中的 NavigationLink ID 问题

时间:2020-12-23 00:13:22

标签: list swiftui edit swiftui-navigationlink

我正在尝试使用 NavigationLink 启用列表的编辑功能。我有以下几点:

EditView - 想使用这个视图来编辑列表项:

import SwiftUI
import Combine

struct EditView: View {
  @Binding var index: String
  @EnvironmentObject var taskStore: TaskStore
    var body: some View {
        Text("Hello, World!")
    }
}

struct EditView_Previews: PreviewProvider {
    @State static var index = ""
    static let taskStore = TaskStore()
    static var previews: some View {
        EditView(index: $index)
    }
}

以及应该使用 NavigationLink 来编辑项目的列表:

if(self.taskStore.tasks.count != 0){
                List {
                    ForEach(self.taskStore.tasks) {
                        task in
                        NavigationLink(destination: EditView(index: task.$id)){
                        VStack(alignment: .leading, spacing: 0){
                                HStack{
                                    VStack{
                                        Text(task.description)
                                        .font(.headline)
                                            Text(String(task.outputYears) + "YRS" + String(task.outputMonths) + "MTHS")
                                        Spacer()
                                    }
                                }
                            }
                        }
                    }
                    .onDelete(perform: self.onDelete)
                }
                .navigationBarTitle("Menu")
                .listStyle(PlainListStyle())
                .padding(.top, 5)
            }

这一行似乎是问题所在:

NavigationLink(destination: EditView(index: task.$id))

如何将任务 ID 传递给 EditView 以允许我在任务存储中编辑正确的时间?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您不需要绑定索引 - 只需将其作为值传递

struct EditView: View {
  var index: String        // << here !!
//...
}

NavigationLink(destination: EditView(index: task.id)){   // << here !!