Вид не перезагружается внутри foreach - PullRequest
0 голосов
/ 07 января 2020

Я использую оператор foreach с @observedObject, который содержит опубликованный объект. Я добавляю функцию вызова для вызова API, и после обновления моя опубликованная переменная.

Вот мой взгляд:

struct SurveyListView: View {
    @ObservedObject var VM:SurveyListViewModel
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    var body: some View {
        GeometryReader{ geo in
            ZStack{
                //MARK: - LIST OF OCCURRENCES -
                ScrollView{
                    VStack(spacing:0){
                        ForEach(self.VM.sections){ sec in
                            HomeSectionSurveyView(section: sec.section)
                            ForEach(sec.occurrences){ occs in
                                NavigationLink(destination:SurveyListView(VM: Container.sharedContainer.resolve(SurveyListViewModel.self)!)){
                                    RawSurveyView(occurrence: occs)
                                }
                            }
                        }
                    }.padding(.bottom,20)
                    .padding(.top,40)
                }
                .padding(.top,geo.size.height * 0.24)
                .onAppear(){
                    self.VM.appear()
                }
            }
        }
    }
}

, а вот мой наблюдаемый объект:

class SurveyListViewModel: ObservableObject {
    // MARK: - IOC -
    let OccurrenceManager:OccurrenceManager
    // MARK: - INIT -
    init(occurrenceManager:OccurrenceManager) {
        self.OccurrenceManager = occurrenceManager
    }

    // MARK: - APPEAR
    func appear()
    {
        Async.background {
            self.OccurrenceManager.getAllOccurrences ()
        }.main{ occs in
            self.sections = occs.groupByDate()
        }
    }

    @Published var sections:[OccurrenceSection] = []

}

Я думал, что опубликованная переменная попросит перезагрузить представление при обновлении , но ничего не меняется в моем foreach. Я делаю что-то неправильно ? спасибо

...