如何仅在尚未缓存的情况下使用 SDWebImageManager 下载图像?

How to use SDWebImageManager to download image only if NOT already cached?

我需要 SDWebImageManager 的完成处理程序功能(将下载或缓存的图像设置为黑白),所以我使用它而不是 sd_setimage。我的问题是我不知道如何使用 SDWebImageManager 下载或获取图像的缓存版本。每次 tableview 单元格出列并重新加载时,图像都会重新下载。我尝试设置选项:SDWebImageDownloaderOptions.useNSURLCache,但无济于事。任何建议将不胜感激!这是我的代码:

SDWebImageManager.shared().imageDownloader?.downloadImage(with:URL(string: imgURL), options: SDWebImageDownloaderOptions.useNSURLCache, progress: nil, completed: { (image, error, cacheType, url) in 
   if image != nil {
      let beginImage = CIImage(image: image!)
      let blackNwhiteImg = beginImage?.applyingFilter("CIColorControls", withInputParameters: [kCIInputSaturationKey:0.0])
      let newImage = UIImage(ciImage: blackNwhiteImg!)
      cell.button.setImage(newImage, for: .normal)
   }
})

从缓存中提取的更新答案:

SDWebImageManager.shared().loadImage(with: URL?, options: SDWebImageOptions, progress: { (Int, Int, URL?) in
    code
}, completed: { (UIImage?, Data?, Error?, SDImageCacheType, Bool, URL?) in
    code
})

为了参考起见,我附上了这张显示评论 XCode 在进入功能时出现的屏幕截图:

此外,SDWebImageManager 文件中包含的注释:

/**
 * Downloads the image at the given URL if not present in cache or return the cached version otherwise.
 *
 * @param url            The URL to the image
 * @param options        A mask to specify options to use for this request
 * @param progressBlock  A block called while image is downloading
 *                       @note the progress block is executed on a background queue
 * @param completedBlock A block called when operation has been completed.
 *
 *   This parameter is required.
 * 
 *   This block has no return value and takes the requested UIImage as first parameter and the NSData representation as second parameter.
 *   In case of error the image parameter is nil and the third parameter may contain an NSError.
 *
 *   The forth parameter is an `SDImageCacheType` enum indicating if the image was retrieved from the local cache
 *   or from the memory cache or from the network.
 *
 *   The fith parameter is set to NO when the SDWebImageProgressiveDownload option is used and the image is
 *   downloading. This block is thus called repeatedly with a partial image. When image is fully downloaded, the
 *   block is called a last time with the full image and the last parameter set to YES.
 *
 *   The last parameter is the original image URL
 *
 * @return Returns an NSObject conforming to SDWebImageOperation. Should be an instance of SDWebImageDownloaderOperation

您可以使用 SDWebImageManager.shared().cachedImageExists(for: imageUrl) 了解 URL 是否被缓存

之后就可以通过这个方法获取到cacheKey

let cacheKey = SDWebImageManager.shared().cacheKey(for: imageUrl)

有了 CacheKey 你可以调用这个方法,在他的闭包中你会得到你的缓存图像

SDWebImageManager.shared().imageCache.queryDiskCache(forKey: cacheKey, done: { (image, cacheType) in

                })