有在寫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!)")
}
}
}