异步获取图像 Firebase Swift 5



我在CellForRowAt中使用此代码来显示图像。滚动很顺利,但网络调试告诉我,每次滚动表格时它仍然会下载图像。 如何下载所有图像一次?

if let url = URL( string: rest1.image) {
DispatchQueue.global().async {
if let data = try? Data(contentsOf: url) {
DispatchQueue.main.async {
cell.RestaurantImage.image = UIImage(data: data)
}
}
}
}

您需要使用NSCache来保存和检索图像。从网络获取图像后,将其存储在缓存中,然后从下次从缓存中加载图像。创建一个具有键NSString和值NSDataNSCache实例,因为 NSCache 只允许类类型。下面是一个示例:

cellForItem方法之外创建图像缓存,也可以将其创建为 Global,如下所示:

let imageCache = NSCache<NSString, NSData>()

然后在cellForItem方法中:

if let url = URL(string: rest1.image) {
if let data = imageCache.object(forKey: rest1.image as NSString) {
cell.RestaurantImage.image = UIImage(data: data as Data)
} else {
DispatchQueue.global().async {
if let data = try? Data(contentsOf: url) {
imageCache.setObject(data as NSData, forKey: rest1.image as NSString)
DispatchQueue.main.async {
cell.RestaurantImage.image = UIImage(data: data)
}
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新