У меня нет цели динамически обновлять экран без перезапуска приложения. Но даже в этом случае я не могу этого сделать. Сначала отображается экран, а затем данные запрашиваются из базы данных. Итак, я вижу пустое представление. Возможно, я не могу полностью понять, как работают потоки, и проблема здесь
Я хочу использовать информацию из Firestore в моем представлении
struct Exercises: View {
@ObservedObject private var viewModel = ExViewModel()
var body: some View {
VStack {
ScrollView{
ForEach(viewModel.exData) { exData in
if exData.isShow {
NavigationLink(destination: CarouselView(navBarTitle: exData.name, data: exData.cards, dataIds: exData.cardsId)) {
ButtonView(title: exData.name)
}
}
}
}
AdBannerView()
}
.navigationBarTitle("Упражнения")
.onAppear(){
self.viewModel.fetchData()
}
}
}
А вот как я получаю свои данные
class ExViewModel: ObservableObject{
@Published var exData = [ExercisesData]()
private var db = Firestore.firestore()
func fetchData() {
let rootCollection = db.collection("exercises")
var ex : [ExercisesData] = []
rootCollection.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
let name = document.data()["name"] as? String ?? ""
let isShow = document.data()["isShow"] as? Bool ?? false
let cardsId = document.data()["cardsId"] as? [String] ?? []
ex.append(ExercisesData(id: document.documentID, name: name, isShow: isShow, cardsId: cardsId))
}
}
self.exData = ex
}
}
}