Я получил на это ответ. SDWebImage обеспечивает скачивание без кеширования и кеширование с ключом. По моему требованию, этого достаточно.
- Сначала установите ключ кеширования для кэширования изображения.
- Затем проверьте, доступно ли изображение с этим ключом кеша.
- Если недоступно, загрузите и кешируйте это изображение с помощью ключа.
После кэширования оно будет доступно при следующей проверке доступности кеша. Поэтому нет необходимости кэшировать изображение несколько раз.
расширение UIImageView {
func setImage(imageUrlString: String) {
let sdManager = SDWebImageManager.shared
let sdDownloader = SDWebImageDownloader.shared
let sdChache = SDImageCache.shared
var cacheKey: String?
let placeholderimage = UIImage(named: "placeholder.png")
guard let imageURL = URL(string: imageUrlString) else {
self.image = placeholderimage
return
}
guard let key = sdManager.cacheKey(for: imageURL) else {return}// set the key you want. In the case of s3 images you can remove the signature part and use the remainig url as key, beacause it's unique.
cacheKey = key
if let key = cacheKey {
if let cachedImage = sdChache.imageFromCache(forKey: key) {
self.image = cachedImage
}
else {
self.sd_imageIndicator = SDWebImageActivityIndicator.gray
self.sd_imageIndicator?.startAnimatingIndicator()
sdDownloader.downloadImage(with: imageURL) { (downloadedImage, imageData, error, status) in
self.sd_imageIndicator?.stopAnimatingIndicator()
if let image = downloadedImage, let data = imageData {
self.image = image
self.sd_imageIndicator?.stopAnimatingIndicator()
sdManager.imageCache.store(image, imageData: data, forKey: key, cacheType: .all) {
print("Image Cached with key==> \(key)")
}
}
else{
self.image = placeholderimage
}
}
}
}
}
}