Swift: обработка нескольких запросов API - PullRequest
1 голос
/ 01 апреля 2020

В настоящее время я реализую приложение, которое имеет 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 в хорошей практике?

...