mirror of
https://github.com/whoeevee/EeveeSpotifyReborn.git
synced 2026-01-09 00:23:20 +01:00
52 lines
1.4 KiB
Swift
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
|
|
}
|
|
}
|