В настоящее время я реализую приложение, которое имеет collectionView. Ячейки в представлении коллекции заполняются через API-запрос. Запросы к одному и тому же API, но в разных местах. Например, для первой ячейки я звоню: «google.de/GamesInItaly», а для второй ячейки - «google / GamesInGermany». В то время как я прокручиваю вниз collectionView, появляющиеся ячейки должны также сделать API-запрос, который имеет разные страны.
Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как обрабатывать различные вызовы API.
Мне удалось сделать один API-запрос и заполнить каждую ячейку одинаковыми данными, но я хочу разные данные для каждой ячейки.
Мой код выглядит следующим образом:
CollectionView:
Вызов с из collectionView:
func fetchMatch() {
ApiService.sharedInstance.fetchGames(from: contentURL, completion: { (content: [[contentModel]]) in
self.content = content
self.collectionView.reloadData()
})
}
API -Услуги:
Установка URL:
func fetchGames(from url: String, completion: @escaping ([contentModel]) -> ()) {
fetchFeedForUrlString(urlString: "\(BaseUrl)/getgames/\(url)", completion: completion)
}
Функция извлечения:
func fetchFeedForUrlString<T: Decodable>(urlString: String, completion: @escaping (T) -> ())
{
let url = URL(string: urlString)
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
guard let data = data else {
return
}
do {
let json = try JSONDecoder().decode(T.self, from: data)
DispatchQueue.main.async {
completion(json)
}
} catch let jsonError {
print(jsonError)
}
}
task.resume()
}
Я думаю, что я могу сделать, это сделать многие из этих функций fetchGames , но я думаю, что это было бы плохой практикой.
Я также читал о DispatchGroup, но я не совсем уверен, как я могу реализовать их в своей программе.
Кто-нибудь знает, как я могу справиться с несколькими вызовами API в хорошей практике?