对数组对象的更改未保存到主ObservableObject

时间:2019-10-14 20:38:44

标签: swiftui

我从SwiftUI开始,遇到了一个ObservableObject数组项未保存到主对象的障碍。

主要对象:

class Batch: Codable, Identifiable, ObservableObject {
    let id: String
    var items = [Item]()
}

项目对象:

class Item: Codable, Identifiable, ObservableObject {
    let id: String
    var description: String
}

我有一个BatchView,我将其中的一批传递给了

struct BatchView: View {
    @ObservedObject var batch: Batch

    var body: some View {
        List {
            ForEach(batch.items) { item in
                ItemView(item: item)
            }
        }
        .navigationBarTitle(batch.items.reduce("", { $0 + $1.description }))
    }
}

ItemView中,我更改了说明:

struct ItemView: View {
    @ObservedObject var item: Item
    @State private var descr = ""

    var body: some View {
        VStack(alignment: .leading) {
            Text("MANUFACTURED")
            TextField("", text: $descr) {
                self.updateDescr(descr: self.descr)
            }
        }
    }

    private func updateDescr(descr: String) {
        item.description = descr
    }
}

但是当我更新批处理项目的描述时,BatchView的标题不会更改,因此对Item的更改不会返回到根Batch

我如何进行上述工作?

1 个答案:

答案 0 :(得分:0)

This answer帮助了我。我必须在要更改的变量之前显式添加@Published