Изменения в объектах массива, не сохраняемые в основной ObservableObject - PullRequest
0 голосов
/ 14 октября 2019

Я начинаю с 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 голосов
/ 15 октября 2019

Этот ответ помог мне. Мне пришлось явно добавить @Published перед переменной, которую я менял.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...