您可以通过以下方式在Kingfisher缓存中存储已有的图像:
let image: UIImage =
ImageCache.default.store(image, forKey: cacheKey)
默认情况下,Kingfisher使用url.absoluteString
作为cacheKey
。
因此,如果您已经从其他地方下载了图像并仍然拥有此URL,则可以自己将它们存储在缓存中,下一次Kingfisher将不会下载图像,而是使用缓存的图像。
如果您只想进行缓存而不下载,则可以通过以下方式检索图像:
cache.retrieveImage(forKey: "cacheKey") { result in
switch result {
case .success(let value):
print(value.cacheType)
print(value.image)
case .failure(let error):
print(error)
}
}
但由于您将其用在集合视图中,请确保在重用collectionViewCell时停止加载
单元格示例:
我们在单元格中存储imageKey
,当缓存返回图像给我们时,我们确保单元格尚未被重用,仍需要此图像。如果单元格被重用,则在prepareToReuse()
中删除存储的imageKey
class LatexCell: UICollectionViewCell {
@IBOutlet var formulaImageView: UIImageView!
private var imageKey: String?
func setup(with imageKey: String) {
self.imageKey = imageKey
ImageCache.default.retrieveImage(forKey: imageKey) { [weak self] result in
guard self?.imageKey == imageKey else { return }
switch result {
case .success(let value):
self?.formulaImageView.image = value.image
case .failure(let error):
break
}
}
}
override func prepareForReuse() {
super.prepareForReuse()
imageKey = nil
formulaImageView.image = nil
}
}