【发布时间】:2017-01-31 04:10:53
【问题描述】:
我使用Alamofire 并发执行多个异步请求,并使用SwiftyJSON 处理响应。
我需要帮助确保附加到 moviesByCategory 的顺序发生。
例如,“top_rated”数据响应应该是附加到moviesByCategory 的第一个元素,而不是“upcoming”。
var moviesByCategory = [[JSON]]()
override func viewDidLoad() {
super.viewDidLoad()
let apiEndPoints = ["top_rated", "popular", "now_playing", "upcoming"]
let dispatchGroup = DispatchGroup()
for endPoint in apiEndPoints {
let endPointURL = URL(string: "https://api.themoviedb.org/3/movie/\(endPoint)?api_key=\(apiKey)&language=en-US&page=1")!
dispatchGroup.enter()
getMoviesFromEndPoint(url: endPointURL)
}
dispatchGroup.notify(queue: DispatchQueue.main) {
self.tableView.reloadData()
}
}
func getMoviesFromEndPoint(url: URL, group: dispatchGroup) {
Alamofire.request(url).responseData { response in
if let data = response.result.value {
let json = JSON(data: data)
self.moviesByCategory.append(json["results"].arrayValue)
}
}
}
DispatchGroup 的目的是在所有请求完成后重新加载UITableView。
对此的任何帮助将不胜感激。请指出我错在哪里。
【问题讨论】:
标签: asynchronous swift3 grand-central-dispatch alamofire