[英]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.