这就是我正在做的事情。
extension UIImageView {
func downloadedFrom(url: URL, contentMode mode: UIViewContentMode = .scaleAspectFit) {
contentMode = mode
URLSession.shared.dataTask(with: url) { data, response, error in
guard
let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
let data = data, error == nil,
let image = UIImage(data: data)
else { return }
DispatchQueue.main.async() {
self.image = image
}
}.resume()
}
func downloadedFrom(link: String, contentMode mode: UIViewContentMode = .scaleAspectFit) {
guard let url = URL(string: link) else { return }
downloadedFrom(url: url, contentMode: mode)
}
我在图像中检查了它在调试状态下的预览中的显示图像。但在self.image = image
之后
图像视图图像上没有任何变化。谁知道问题出在哪里?谢谢
答案 0 :(得分:3)
下载图片的最有效方式:SDWebImage
您可以将Cocoa Pod文件用于SDWebImage Library。
Swift片段:
import SDWebImage
imageView.sd_setImage(with: URL(string: @"user-url"), placeholderImage: UIImage(named: "placeholder"))
Objective-C片段:
#import <SDWebImage/UIImageView+WebCache.h>
...
[imageView sd_setImageWithURL:[NSURL URLWithString:@"user-url"]
placeholderImage:[UIImage imageNamed:@"placeholder"]];
希望无论何时使用UICollectionView或UITableView,这都有助于有效地下载图像。
答案 1 :(得分:0)
您可以使用下面的Kingfisher库轻松完成。
let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)
答案 2 :(得分:0)
请尝试以下代码
if data != nil { // check nil here
let image = UIImage(data: data)
DispatchQueue.main.async {
self.image = image
}
}
}.resume()
答案 3 :(得分:0)
无需检查图像mime类型,只需检查数据和图像就足够了,因为数据将为零错误,反之亦然。
更改为
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, let image = UIImage(data: data) else { return }
DispatchQueue.main.async {
self.image = image
}
}.resume()
使用调试器与图像交叉检查。