SDWebImageDownloader cannot cache image

有在寫iOS專案的開發者絕對用過大名鼎鼎SDWebImage,絕大多數使用情境都是指定網路圖片url給某個UIImageView,以SDWebImage達到圖片快取的效果。

UIImageView載入網路圖片最簡單的方式透過sd_setImage方法直接取用,更進階的可以使用SDWebImageManager或SDWebImageDownloader,前者的用途兼具下載圖片與快取圖片,後者只能下載。

但有些圖片提供者要求必須在Http header指定安全性驗證用的value,這時候就只能使用無法圖片快取的SDWebImageDownloader

為了解決這個問題,可以搭配SDImageCache使用,SDWebImageDownloader下載完後使用url作為key儲存至memory,下次再遇到相同url只要透過此key即可載入快取給UIImageView使用

程式碼如下

if let imageCache = SDImageCache.shared.imageFromMemoryCache(forKey: myURLString) {

    imageView.image = imageCache

} else {

    SDWebImageDownloader.shared.setValue("myToken", forHTTPHeaderField: "headerName")

    SDWebImageDownloader.shared.downloadImage(with: myURLString) { (image, data, error, finished) in

        if image != nil && finished {

            SDImageCache.shared.storeImage(toMemory: image, forKey: myURLString)

            imageView.image = image

        }

        if error != nil {

            print("[下載圖片失敗] url:\(myURLString), error:\(error!)")

        }

    }

}

沒有留言: