Skip to content

Instantly share code, notes, and snippets.

@olivaresf
Forked from amosavian/UIImageView+Cache.swift
Created April 17, 2020 18:04
Show Gist options
  • Save olivaresf/2b4485186a46ccf07831f398fa2e2040 to your computer and use it in GitHub Desktop.
Save olivaresf/2b4485186a46ccf07831f398fa2e2040 to your computer and use it in GitHub Desktop.
extension UIImageView {
/// Loads image from web asynchronosly and caches it, in case you have to load url
/// again, it will be loaded from cache if available
func load(url: URL, placeholder: UIImage?, cache: URLCache? = nil) {
let cache = cache ?? URLCache.shared
let request = URLRequest(url: url)
if let data = cache.cachedResponse(for: request)?.data, let image = UIImage(data: data) {
self.image = image
} else {
self.image = placeholder
URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in
if let data = data, let response = response, ((response as? HTTPURLResponse)?.statusCode ?? 500) < 300, let image = UIImage(data: data) {
let cachedData = CachedURLResponse(response: response, data: data)
cache.storeCachedResponse(cachedData, for: request)
self.image = image
}
}).resume()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment