快速在forEach循环中跨视图传递唯一对象的数据

问题描述

我有两个视图,ViewAssignment 和 TaskDetailView。我的 ViewAssignment 页面从环境对象中获取数据,并使用该数据创建一个列表。

在单击列表的每个项目时,TaskDetailView 作为导航链接弹出,但是,我无法将 TaskDetailView 中的信息设为该特定迭代(列表中的项目)的唯一信息

我相信问题来自我的 TaskDetailView.swift

import SwiftUI

struct TaskDetailView: View {
    @EnvironmentObject var assignment: Assignments
    @State var taskNotes = ""
    var body: some View {
        vstack(spacing: 10) {
            Image("english-essay")
                .resizable()
                .scaledToFit()
                .frame(width: 250,height: 160)
                .cornerRadius(20)
            
            
            Text(self.assignment.data.first?.taskName ?? "Untitled Task")
                .font(.title2)
                .fontWeight(.semibold)
                .lineLimit(2)
                .multilineTextAlignment(.center)
            
            
            
            
            HStack(spacing: 20) {
                Label(self.assignment.data.first?.weighting ?? "0",systemImage: "percent")
                    .font(.subheadline)
                    .foregroundColor(.secondary)
                
                Text(self.assignment.data.first?.dueDate ?? "No Date")
                    .font(.subheadline)
                    .foregroundColor(.secondary)
            }
            
            TextField("Write any notes here",text: $taskNotes)
                .font(.body)
                .padding()
            
            Spacer()
            
        }
        
    }
}

struct TaskDetailView_Previews: PreviewProvider {
    static var previews: some View {
        TaskDetailView() // I assume there is some information I have to pass through here
    }
}

详情,这是我的另一个观点:

import SwiftUI

struct ViewAssignment: View {
    
    // Observed to update the UI
    @EnvironmentObject var assignment: Assignments
    
    var body: some View {
        ZStack {
            NavigationView {
                
                List(self.assignment.data) { task in
                    NavigationLink (
                        destination: TaskDetailView(),label: {
                            Image(systemName: "doc.append.fill")
                                .scaleEffect(2.5)
                                .padding()
                            
                            vstack(alignment: .leading,spacing: 3) {
                                
                                Text(task.taskName)
                                    .fontWeight(.semibold)
                                    .lineLimit(2)
                                
                                Text(task.dueDate + " - " + task.subject)
                                    .font(.subheadline)
                                    .foregroundColor(.secondary)
                            }
                        })
                    
                }
                .navigationTitle("My Tasks")
                .listStyle(InsetGroupedListStyle())
                
                
            }
            
        }
    }
    
}








struct ViewAssignment_Previews: PreviewProvider {
    static var previews: some View {
        ViewAssignment()
    }
}

我还想知道,在为列表中的每个项目设置唯一的屏幕后,我是否能够在重新加载应用程序时保存文本字段的内容,也许通过@AppStorage? 感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)