异步获取图像 Firebase Swift 5

问题描述 投票:1回答:1

我在CellForRowAt中使用这段代码来显示图片。我在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)
                        }
                    }
                }
            }
ios firebase uiimageview tableview urlfetch
1个回答
1
投票

你需要使用 NSCache 用于保存和检索图像。一旦从网络中获取图像,就将其存储在Cache中,下次再从Cache中加载图像。创建一个 NSCache 带钥匙 NSString 和价值 NSData 因为NSCache只允许类类型。下面是一个例子。

在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)
                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.