修改 SwiftUI 中 ForEach 中的结构数据

jas*_*hng 4 foreach swift swiftui

我有一个概述数据的结构,然后是一个具有结构数组的类。

struct Example: Codable, Identifiable {
     var id: UUID

     var title: String
     var description: String?

     var tags: [String]
}

class Examples: ObservableObject {
     @Published var examples = [Example]()
}
Run Code Online (Sandbox Code Playgroud)

然后,我有一个用按钮显示数据的 ForEach:

ForEach(examples.examples) { example in
     VStack {
         Button("Complete") {
            example.completed = true
         }
         Text(example.title)
     }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行时,它给出错误“无法分配给属性:‘example’是‘let’常量。” 我尝试使用 @Binding var(来自这篇文章)将示例传递到一个单独的视图中,并使用索引修改数据(来自这篇文章),但是两者都给我一个错误,指出 Xcode 无法生成诊断报告并提交反馈。我怎样才能修改数据?

抱歉,如果这是一个不好的问题,我对 SwiftUI 还很陌生

paw*_*222 5

这是因为 ForEach 返回您要操作的原始文件的只读副本example,并且您无法修改它。即使可以,它也不会是相同的结构(结构是值类型)。

您需要访问原始项目:

var body: some View {
    ForEach(examples.examples.indices) { index in
        VStack {
            Button("Complete") {
                examples.examples[index].completed = true
            }
            Text(examples.examples[index].title)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)