Пользовательский вид SwiftUI не обновляется после изменений модели @ObservedObject

#swift #swiftui

#swift #swiftui

Вопрос:

Я создал пользовательский вид, который отображает содержимое в зависимости от того, является ли переданный аргумент nil или нет. Проблема, с которой я сталкиваюсь, заключается в том, что представление не обновляется / становится недействительным при изменении optionalData. Дополнительные данные хранятся в моей модели.

 struct MyUpdatingView {
    var model: Model
    
    var body: some View {
        if model.optionalData == nil { 
             ProgressView()
        } else {
             OptionalDataView(model.optionalData!)
        }
    }

}
  

Модель:

 class Model: ObservableObject {

    @Published var optionalData: OptionalData

    init (){
        loadOptionalDataAsync()
    }
}
  

Проблема, с которой я сталкиваюсь, заключается в том, что представление не обновляется при загрузке дополнительных данных в моем основном представлении. Однако интересно то, что я могу добавить Text(model.optionalData.debugDescription) представление, которое, как представляется, обновляется при загрузке данных.

Есть идеи! Что я могу делать неправильно?

Ответ №1:

По крайней мере, у вас model должен быть ObservedObject

 struct MyUpdatingView {
    @ObservedObject var model: Model     // << here !!
    ...
  

также убедитесь, что вы обновили optionalData on DispatchQueue.main после loadOptionalDataAsync завершения.