CachedImageView.swift 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. //
  2. // CachedImageView.swift
  3. // LiveLikeGiphyChallenge
  4. //
  5. // Created by Arbnor Tefiki on 6.2.22.
  6. //
  7. import UIKit
  8. var cachedImages = NSCache<NSString, UIImage>()
  9. class CachedImageView: UIImageView {
  10. private var currentURL: NSString?
  11. func loadAsyncImage(url: String, placeholder: UIImage?) {
  12. let imageURL = url as NSString
  13. if let cachedImage = cachedImages.object(forKey: imageURL) {
  14. image = cachedImage
  15. return
  16. }
  17. image = placeholder
  18. currentURL = imageURL
  19. guard let requestURL = URL(string: url) else { image = placeholder; return }
  20. URLSession.shared.dataTask(with: requestURL) { (data, response, error) in
  21. DispatchQueue.main.async { [weak self] in
  22. guard let imageData = data, error == nil else {
  23. self?.image = placeholder
  24. return
  25. }
  26. if self?.currentURL == imageURL {
  27. if let imageToShow = UIImage.gifImageWithData(imageData) {
  28. cachedImages.setObject(imageToShow, forKey: imageURL)
  29. self?.image = imageToShow
  30. } else {
  31. self?.image = placeholder
  32. }
  33. }
  34. }
  35. }.resume()
  36. }
  37. }