无法为 NSCache 设置对象

Cod*_*oop 0 caching firebase swift

我似乎不明白为什么这不起作用。我正在尝试获取缓存来存储 Firebase 中的用户图像,以便我可以将它们存储在用户的手机上。这是我的代码。

import UIKit

let imageCache = NSCache<AnyObject, AnyObject>()

extension UIImageView {

func loadImageUsingCacheWithUrlString(urlString: String) {
                let url = NSURL(string: urlString)
                URLSession.shared.dataTask(with: url! as URL, completionHandler: { (data, response, error) in
                    
                    if error != nil {
                        print(error!)
                        return
                    }
                    DispatchQueue.main.async {
                        
                        if let downloadedImage = UIImage(data: data!) {
                            imageCache.setObject(downloadedImage, forKey: urlString)
                            
                            self.image = downloadedImage
                        }
                    }
                    
                    }).resume()
      }

}
Run Code Online (Sandbox Code Playgroud)

我不断收到错误:无法使用类型为“(UIImage, forKey: String)”的参数列表调用“setObject”

我该如何摆脱这个错误?

Bib*_*cob 5

修改 的参数列表NSCache。此外,修复了从缓存加载图像(如果有可用逻辑)的问题。这是代码:

let imageCache = NSCache<NSString, UIImage>()

extension UIImageView {

    func loadImageUsingCacheWithUrlString(urlString: String) {
        if let image = imageCache.object(forKey: urlString as NSString) {
            self.image = image
            return
        }
        URLSession.shared.dataTask(with: URL(string: urlString)!, completionHandler: { (data, response, error) in
            if error != nil {
                print(error!)
                return
            }
            DispatchQueue.main.async {
                if let downloadedImage = UIImage(data: data!) {
                    imageCache.setObject(downloadedImage, forKey: urlString as NSString)
                    self.image = downloadedImage
                }
            }
        }).resume()
    }
}
Run Code Online (Sandbox Code Playgroud)