Cody Blog

Using Haneke for Image Cache in Swift

如果要在 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)

Reference

iOS

Related Posts

Comments