Ir a la última revisión | 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 UIKitclass ImageLoader: ObservableObject {@Published var image: UIImage?private(set) var isLoading = falseprivate let url: URLprivate var imageCache: ImageCache?//private var imageCache: ImageCacheprivate var appData = AppData.sharedInstanceprivate 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() {if imageCache!.cache.hasData(forKey: key) {print("ImageLoader from cache key : \(key)")self.image = imageCache!.cache.readImageForKey(key: key)return}/*if let image = cache?[key as NSString] {print("ImageLoader from cache key: \(key)")self.image = imagereturn}*/print("ImageLoader from url key: \(key)")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}}}