繁体   English   中英

如何更改 forEach 中的 StateObject 数组?

[英]How do i change a StateObject Array in a forEach?

我有一个正在初始化的 StateObject,它包含一个“Activity”数组,它本身包含一个包含字符串的属性名称。 当我在 forEach 中迭代数组时,我尝试在另一个视图中更改 Activity 的名称,但更改未显示在列表中。 这是代码:

struct ContentView: View {
    @StateObject var store = ActivityStore()
    @State var showAdd = false
    
    var body: some View {
        
        NavigationView {
            
            VStack {
                if store.Activities.isEmpty {
                    
                    Text("Please Add an Activity")
                    
                } else {
                    
                    List {
                        Section(header: Text("Activities: ") ) {
                            
                            
                            ForEach(store.Activities) { activity in
                                
                                NavigationLink( destination: DetailView(activity: activity))
                                {
                                    
                                    Text(verbatim: activity.name)
                                }
                                
                            }
                        }
                    }
                    
                    
                }
                
            }
            .navigationTitle("ITrack")
            .navigationBarItems(trailing: Button(action: { showAdd = true }) {
                Text("Add")
            })
            .sheet(isPresented: $showAdd) {
                AddView(store: store)
            }
        }
    }
}


struct DetailView: View {
    
   
    @Binding var activity: Activity
    
    var body: some View {
        VStack {
    
            TextField("name", text: $activity.name )
            Text(activity.description)
            
            
        }
    }
}


struct Activity: Identifiable {
    var id = UUID()
    
    var name: String
    var description: String
    
    var log: [String] = []
    
    
    init(name: String, description: String) {
        self.name = name
        
        self.description = description
       
        
    }
}


class ActivityStore: ObservableObject {
    
    @Published var Activities: [Activity] = []
    

    
    func demo() -> [Activity] {
        let activities: [Activity] = []
        
        Activities.append(Activity(name: "br1", description: "br111111"))
        Activities.append(Activity(name: "br2", description: "br222222"))
        Activities.append(Activity(name: "br3", description: "br333333"))
        Activities.append(Activity(name: "br4", description: "br444444"))
        
        return activities

    }
    
}

这是需要的更新

1)

struct Activity: Identifiable, Hashable {
ForEach(Array(store.Activities.enumerated()), id: \.1) { i, activity in
    NavigationLink( destination: DetailView(activity: $store.Activities[i]))
    {
        Text(verbatim: activity.name)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM