Files
EeveeSpotifyReborn/Sources/EeveeSpotify/Settings/ViewModels/ImageViewModel.swift
T
2024-10-09 21:38:29 +03:00

52 lines
1.4 KiB
Swift

import SwiftUI
import UIKit
class ImageViewModel: ObservableObject {
@Published var image: UIImage?
private var imageCache: NSCache<NSString, UIImage>?
init(urlString: String?) {
loadImage(urlString: urlString)
}
private func loadImage(urlString: String?) {
guard let urlString = urlString else { return }
if let imageFromCache = getImageFromCache(from: urlString) {
self.image = imageFromCache
return
}
loadImageFromURL(urlString: urlString)
}
private func loadImageFromURL(urlString: String) {
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { data, response, error in
guard error == nil else {
return
}
guard let data = data else {
return
}
DispatchQueue.main.async { [weak self] in
guard let loadedImage = UIImage(data: data) else { return }
self?.image = loadedImage
self?.setImageCache(image: loadedImage, key: urlString)
}
}.resume()
}
private func setImageCache(image: UIImage, key: String) {
imageCache?.setObject(image, forKey: key as NSString)
}
private func getImageFromCache(from key: String) -> UIImage? {
return imageCache?.object(forKey: key as NSString) as? UIImage
}
}