Мое представление таблицы не заполняется после asyn c (api) вызовов fini sh. Второй вызов asyn c внутри for l oop требует выполнения первого вызова asyn c перед выполнением (он зависит от него, поскольку использует из него массив mov ie). Кажется, я не могу понять, как правильно выполнить эту работу и заставить мои переменные сохраняться из вызовов asyn c, чтобы перейти к моему tableview после exeting DispatchQueue.main.async
. Вот мой код:
let dispatchGroup = DispatchGroup()
DispatchQueue.main.async
{
dispatchGroup.enter()
GenresMDB.genre_movies(genreId: categoryNum[genre], include_adult_movies: true, language: "en") //first async call
{ [weak self] apiReturn, movieList in
guard let self = self else {return}
if let movies = movieList
{
for movie in movies
{
self.movies.append(MovieDT(title: movie.title ?? "Missing Title", description: movie.overview ?? " ", releaseDate: movie.release_date ?? " ", stars: movie.vote_average ?? 0, id: movie.id ?? 0))
}
}
dispatchGroup.leave()
for movie in self.movies
{
dispatchGroup.enter()
self.db.collection("Movies").document(String(movie.id)).getDocument() //second async call (multiple calls) -> this needs the first async call above to be finished
{ [weak self] (querySnapshot, err) in
guard self == self else {return}
if let err = err {
print("Error getting documents: \(err)")
}
else
{
guard let snap = querySnapshot else {return}
let data = snap.data()
self!.upvoteCount.append((data?["upvoteCount"] as? Int ?? 0) - (data?["downvoteCount"] as? Int ?? 0))
}
dispatchGroup.leave()
}
}
}
}
dispatchGroup.notify(queue: DispatchQueue.main) {
print("Async calls finished")
self.tableView.reloadData()
}