Я использую оператор 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. Я делаю что-то неправильно ? спасибо