如何更改来自结构的项目的 bool 值并因此更新清单?

How do I change the bool value of an item that comes from a struct and hence update a checklist?

背景
我正在尝试构建一个列表,旁边有一个 checkmark/tick 框。结构用于为每个项目创建 "data"。然后将其传递给 class ,其中包含由该结构创建的项目数组。从这里开始,我使用了可观察对象协议并将 class 传递到列表中。

Objective
我希望能够在完成时将每个项目单独标记为已完成。

当前分析
我知道当我手动将 'completed' 值从 false 更改为 true 时图像会切换。 我还测试了 onTapAction 以确保它正常工作。 我认为问题出在 "self.one.completed.toggle()" 或绑定或我不知道的地方。

struct One: Identifiable, Codable {
     let id = UUID()
     var item: String
    var completed:Bool = false
}

class OneList: ObservableObject{
    @Published var items1 = [One]()





struct ContentView: View {

    @ObservedObject var itemss1 = OneList()
    @ObservedObject var itemss2 = TwoList()
    @ObservedObject var itemss3 = ThreeList()
    @ObservedObject var itemss4 = FourList()

    @State private var  showingAdditem: Bool = false

    @Binding var one:One

    var body: some View {

        NavigationView{
            ZStack{
                List{
                    Section(header: Text("Vital")){
                        ForEach(itemss1.items1){ item in
                                    HStack{

                                        Image(systemName: self.one.completed ? "checkmark.circle":"circle")
                                            .onTapGesture {
                                                self.one.completed.toggle()

                                        }

                                        Text(item.item)}

P.S。我对 Swift 和 Stack overflow 比较陌生,所以任何其他建议都将不胜感激

在我的 other answer 中,我使用 ObservableObject 所需对象的协议实现了类似的东西,然后使用 EnvironmentObject。实际上我没有尝试用其他包装器来做这个。这是代码,您可以在其中看到切换图像:

import SwiftUI

class One: Identifiable, ObservableObject { // ObservableObject requires class

    let id: UUID
    var item: String = "[undefined]"
    @Published var completed: Bool = false // this will affect the UI

    init(item: String, completed: Bool) {
        id = UUID()
        self.item = item
        self.completed = completed
    }

}

class OneList: ObservableObject{
    @Published var items = [One(item: "first", completed: false),
                            One(item: "second", completed: false),
                            One(item: "third", completed: false)]
}

struct CheckboxList: View {

    @EnvironmentObject var itemList: OneList

    var body: some View {
        List {
            Section(header: Text("Vital")) {
                ForEach(itemList.items.indices) { index in
                    VitalRow()
                        .environmentObject(self.itemList.items[index])
                        .onTapGesture {
                            self.itemList.items[index].completed.toggle()
                        }
                }
            }
        }
    }
}

struct VitalRow: View {
    @EnvironmentObject var item: One
    var body: some View {
        HStack{
            Image(systemName: item.completed ? "checkmark.circle" : "circle")
            Text("\(item.item)")
        }
    }
}

struct CheckboxList_Previews: PreviewProvider {
    static var previews: some View {
        CheckboxList().environmentObject(OneList())
    }
}