mirror of
https://github.com/whoeevee/EeveeSpotifyReborn.git
synced 2026-01-09 00:23:20 +01:00
v5.5
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user