// // CachedImageView.swift // LiveLikeGiphyChallenge // // Created by Arbnor Tefiki on 6.2.22. // import UIKit var cachedImages = NSCache() class CachedImageView: UIImageView { private var currentURL: NSString? func loadAsyncImage(url: String, placeholder: UIImage?) { let imageURL = url as NSString if let cachedImage = cachedImages.object(forKey: imageURL) { image = cachedImage return } image = placeholder currentURL = imageURL guard let requestURL = URL(string: url) else { image = placeholder; return } URLSession.shared.dataTask(with: requestURL) { (data, response, error) in DispatchQueue.main.async { [weak self] in guard let imageData = data, error == nil else { self?.image = placeholder return } if self?.currentURL == imageURL { if let imageToShow = UIImage.gifImageWithData(imageData) { cachedImages.setObject(imageToShow, forKey: imageURL) self?.image = imageToShow } else { self?.image = placeholder } } } }.resume() } }