Я начинаю с 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
.
Как мне заставить работать выше?