我正在尝试从for循环中的多个GET请求中下载数据,然后将其添加到表视图中。 我成功地获取数据,但遇到的问题是主线程在所有数据从请求中下载之前一直运行,因此它不会加载到表视图中。 我想使用信号量一次尝试运行一个线程,但它似乎并没有工作。 下面是代码:(Swift)在for循环中使用带NSURLSession的信号量
for item in array{
let http = item["http"] as! String
let URL = NSURL(string: http)
let Request = NSMutableURLRequest(url: URL! as URL)
Request.setValue(self.headerVal, forHTTPHeaderField: "Authorization")
Request.httpMethod = "GET"
let UrlSession = URLSession.shared
let Info = UrlSession.dataTask(with: Request as URLRequest) { (data, response, error) -> Void in
if error != nil{
print(error!)
return;
}
else{
do{
let ResponseData = try JSONSerialization.jsonObject(with: data!) as! [String:Any]
guard let results = ResponseData["data"] as? [Any] else {
print("Couldnt get response from \(http)")
return
}
let Result = results[0] as! [String:Any]
self.result.append(Result)
}
catch{
print(error)
}
}
}
Info.resume()
}
print("finished")
self.tableView.reloadData()
如何让这个我可以刷新我的tableview一旦所有来自请求的数据下载完毕?
如果我想按顺序运行它们,该怎么办? – Timeless
然后你应该使用Semaphore作为上面的示例 – Terence