Rev 19 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
//// ImageLoader.swift// twogetskills//// Created by Efrain Yanez Recanatini on 3/9/22.//import Combineimport UIKitimport SwiftUIclass ImageLoader: ObservableObject {@Published var image: UIImage?private(set) var isLoading = falseprivate let url: URLprivate var imageCache: ImageCache?//private var imageCache: ImageCacheprivate var appData = Environment(\.appData).wrappedValueprivate let key : String/*init(url: URL) {self.url = urlself.imageCache = ImageCache.sharedInstancelet urlString : String = url.absoluteStringlet arrayFullFilename = urlString.split(separator: "/")self.key = String(arrayFullFilename[arrayFullFilename.count - 1])}*/init(url: URL, cache: ImageCache? = nil) {self.url = urlself.imageCache = cachelet urlString : String = url.absoluteStringlet arrayFullFilename = urlString.split(separator: "/")self.key = String(arrayFullFilename[arrayFullFilename.count - 1])}func load() {print("ImageLoaderkey: \(key)")if imageCache!.cache.hasData(forKey: key) {do {self.image = try imageCache!.cache.readImageForKey(key: key)return} catch {print("Error cargando la imagen desde el cache")}}print("Cargando la imagen desde el URL")/*if let image = cache?[key as NSString] {print("ImageLoader from cache key: \(key)")self.image = imagereturn}*/var request = URLRequest(url: url)let headerSecurity = HeaderSecurity()request.httpMethod = "GET"request.addValue(appData.deviceUuid, forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_TOKEN)request.addValue(headerSecurity.secret, forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_SECRET)request.addValue(String(headerSecurity.created), forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_CREATED)request.addValue(String(headerSecurity.rand), forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_RAND)let task = URLSession.shared.dataTask(with: request, completionHandler: setImageFromData)task.resume()}private func setImageFromData(data: Data?, urlResponse: URLResponse?, error: Error?) {guard error == nil else {// print("\(error!)")return}guard let content = data else {// print("No data")return}DispatchQueue.main.async {self.image = UIImage(data: content)// self.dataHasLoaded = trueprint("ImageLoader save to cache key: \(self.key)")self.imageCache!.cache.write(image: self.image!, forKey: self.key)//self.cache?[self.key as NSString] = self.image}}}