Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:处理多个API请求_Ios_Swift_Api - Fatal编程技术网

Ios Swift:处理多个API请求

Ios Swift:处理多个API请求,ios,swift,api,Ios,Swift,Api,我目前正在实现一个具有collectionView的应用程序。集合视图中的单元格通过API请求填充。请求发送到相同的API,但位置不同。比如我打电话的第一个单元格:“google.de/gamessinitaly”,第二个单元格:“google/gamessingermany”。当我向下滚动collectionView时,出现的单元格也应该发出一个具有不同国家/地区的API请求 我面临的问题是,我不知道如何处理不同的API调用。 我设法发出一个API请求,并用相同的数据填充每个单元格,但我希望每

我目前正在实现一个具有collectionView的应用程序。集合视图中的单元格通过API请求填充。请求发送到相同的API,但位置不同。比如我打电话的第一个单元格:“google.de/gamessinitaly”,第二个单元格:“google/gamessingermany”。当我向下滚动collectionView时,出现的单元格也应该发出一个具有不同国家/地区的API请求

我面临的问题是,我不知道如何处理不同的API调用。
我设法发出一个API请求,并用相同的数据填充每个单元格,但我希望每个单元格都有不同的数据

我的代码如下所示:

收藏视图:

从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()
} 
func fetchFeedForUrlString(urlString:String,completion:@escaping(T)->())
{
让url=url(字符串:urlString)
让task=URLSession.shared.dataTask(带:url!){(数据、响应、错误)在
guard let data=其他数据{
返回
}
做{
让json=try JSONDecoder().decode(T.self,from:data)
DispatchQueue.main.async{
完成(json)
}
}接住让杰森罗{
打印(jsonError)
}
}
task.resume()
} 
我想我可以做的是制作许多这些fetchGames函数,但我认为这是一种不好的做法。
我也读过关于DispatchGroup的文章,但我不确定如何在我的程序中实现这些


有人知道如何在良好的实践中处理多个API调用吗

我认为,每个单元的API调用不是最佳实践,我建议使用启用分页的单个API。获取前几个国家/地区比赛数据,然后使用滚动加载更多数据pagination@Catherine谢谢你的回答。我搜索了一下,发现了这个,但不幸的是,它使用了一个从api到下一页的链接。正如我所看到的,我的API请求没有提供某种链接。这是你的意思还是我错了?我认为,每个单元格的API调用不是最佳实践,我建议使用启用分页的单个API。获取前几个国家/地区比赛数据,然后使用滚动加载更多数据pagination@Catherine谢谢你的回答。我搜索了一下,发现了这个,但不幸的是,它使用了一个从api到下一页的链接。正如我所看到的,我的API请求没有提供某种链接。这是你的意思还是我错了?