我试图使用Alamofire进行数据请求。以前我没有Alamofire的这个任务的代码是:
let url = URL(string: urlString)
URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
//download hit an error so lets return out
if error != nil {
print(error)
return
}
DispatchQueue.main.async(execute: {
if let downloadedImage = UIImage(data: data!) {
imageCache.setObject(downloadedImage, forKey: urlString as NSString)
self.image = downloadedImage
}
})
}).resume()
尝试使用Alamofire,我试过了:
let url = URL(string: urlString)
Alamofire.request(.get, url)
.responseImage { response in
DispatchQueue.main.async(execute: {
if let downloadedImage = response.result.value {
// image is here.
imageCache.setObject(downloadedImage, forKey: urlString as NSString)
self.image = downloadedImage
}else{
// check what happened.
}
})
}
但是我在请求参数中的url
上收到错误,"调用"中的额外参数。我在SO上检查了同一问题的其他问题,他们似乎都试图传递不同的参数,而不仅仅是一个URL,所以我不确定如何应用这些答案。
感谢您的帮助。
答案 0 :(得分:1)
Alamofire.request
参数已更改。第一个参数曾经是HTTP方法,但现在URL是第一个参数,method
参数是第二个(并且是可选的):
let url = URL(string: urlString)! // note, unwrap the optional URL
Alamofire.request(url, method: .get)
.responseImage { ... }
或者简单地说:
let url = URL(string: urlString)!
Alamofire.request(url)
.responseImage { ... }
或者,完全绕过URL
:
Alamofire.request(urlString)
.responseImage { ... }
无关,Alamofire不需要DispatchQueue.main.async
。与URLSession
不同,Alamofire已在主队列上运行其完成处理程序(除非您向queue
方法提供request
参数)。因此,取消DispatchQueue.main.async
来电。