如果要在 iOS 上,圖片是從網路下載回來的話,勢必要需要做快取,以避免每一次顯示都要重新載入,今天要介紹一套叫 Haneke的 Swift Library, Haneke 是使用 extension 的方法讓 UIImageView 多了一些方法可以做快取。
首先, 安裝可以透過 CocoPods,這邊不多詳述。使用之前記得要先 import:
import Haneke
如果想顯示一張網路上的圖片: http://i.imgur.com/thfn9Ml.jpg,最簡單用法就是
imageView.hnk_setImageFromURL("http://i.imgur.com/thfn9Ml.jpg")
它就會幫你做完下載、快取、重載的動作,相當的方便。另外,若想刪除所有的 image ache,可執行:
Haneke.Shared.imageCache.removeAll()
另外比較進階的用法,像是有一些圖片需要帶 HTTP Header 才有權限存取的話,這邊以加一個 Authorization 的 header 為例,先新增一個自訂的 NetworkFetcher
public class BearerHeaderNetworkFetcher<T: DataConvertible> : NetworkFetcher<T> {
var token: String
public override var session : NSURLSession {
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders = [
"Authorization": self.token
];
return NSURLSession(configuration: configuration)
}
override init(URL : NSURL) {
self.token = ""
super.init(URL: URL)
}
convenience init(URL : NSURL, token: String) {
self.init(URL: URL)
self.token = token
}
}
使用的方法就要改呼叫 hnk_setImageFromFetcher()
let url = NSURL(string: "https://YOUR_URL")
let fetcher = BearerHeaderNetworkFetcher<UIImage>(URL: url!, token: token)
imageView.hnk_setImageFromFetcher(fetcher)