Skip to content

Instantly share code, notes, and snippets.

@LucasMW
Created January 23, 2020 01:55
Show Gist options
  • Save LucasMW/2ce2287c86919fe22db34728b9bb5d33 to your computer and use it in GitHub Desktop.
Save LucasMW/2ce2287c86919fe22db34728b9bb5d33 to your computer and use it in GitHub Desktop.
//
// ImageCache.swift
// MWN - Minimal World News
//
// Created by Lucas Menezes on 1/22/20.
// Copyright © 2020 Lucas Menezes. All rights reserved.
//
import UIKit
class ImageCache {
private var dict : [String : UIImage] = [:]
var defaultImage = UIImage()
private func getData(from url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) {
URLSession.shared.dataTask(with: url, completionHandler: completion).resume()
}
func getImage(for urlString: String, completion: @escaping (UIImage) -> () ) {
guard let image = dict[urlString] else {
downloadImage(from: urlString) { (image) in
completion(image)
}
return
}
completion(image)
}
private func downloadImage(from str: String, completion: @escaping (UIImage) -> ()) {
guard let url = URL(string: str) else { return }
getData(from: url) { data, response, error in
guard let data = data, error == nil else { return }
self.dict[str] = UIImage(data: data)
completion(self.dict[str] ?? self.defaultImage)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment