У меня есть представление содержимого, где я показываю список элементов, используя ForEach
@ObservedObject var homeVM : HomeViewModel
var body: some View {
ScrollView (.horizontal, showsIndicators: false) {
HStack(spacing: 10) {
Spacer().frame(width:8)
ForEach(homeVM.favoriteStores , id: \._id){ item in
StoreRowOneView(storeVM: item)
}
Spacer().frame(width:8)
}
}.frame(height: 100)
}
И мой ObservableObject
содержит
@Published var favoriteStores = [StoreViewModel]()
И StoreViewModel
определяется следующим образом:
class StoreViewModel : ObservableObject {
@Published var store:ItemStore
init(store:ItemStore) {
self.store = store
}
var _id:String {
return store._id!
}
}
Если я заполняю массив напрямую, он работает нормально, и я могу видеть список магазинов, но если я заполнил массив после сетевого вызова (фоновое задание), представление не получило уведомления о том, что произошли изменения
StoreApi().getFavedStores(userId: userId) { (response) in
guard response != nil else {
self.errorMsg = "Something wrong"
self.error = true
return
}
self.favoriteStores = (response)!.map(StoreViewModel.init)
print("counnt favorite \(self.favoriteStores.count)")
}
Но странная вещь такова: - если я добавлю текст, показывающий количество элементов массива, представление получит уведомление, и все будет работать нормально
Вот что я имею в виду:
@ObservedObject var homeVM : HomeViewModel
var body: some View {
ScrollView (.horizontal, showsIndicators: false) {
HStack(spacing: 10) {
Spacer().frame(width:8)
ForEach(homeVM.favoriteStores , id: \._id){ item in
StoreRowOneView(storeVM: item)
}
Text("\(self.homeVM.favoriteStores.count)").frame(width: 100, height: 100)
Spacer().frame(width:8)
}
}.frame(height: 100)
}
Любое объяснение этому?