我在这里得到这个错误:
image.load(url: product?.productImage!)
图像的定义:
@IBOutlet var image: CellImageView!
下面是我的CellImageView类:
import UIKit
class CellImageView: UIImageView {
var task: URLSessionDataTask!
var imageCache = NSCache<AnyObject, AnyObject>()
func load(url: String) {
let real_url = url.replacingOccurrences(of: *image_path_here*, with: *image_path_here*)
let imageUrl = URL(string: real_url)
image = nil
if let task = task {
task.cancel()
}
if let imageFromCache = imageCache.object(forKey: imageUrl?.absoluteString as AnyObject) as? UIImage {
image = imageFromCache
}
task = URLSession.shared.dataTask(with: imageUrl!, completionHandler: { data, _, error in
guard let data = data, let newImage = UIImage(data: data) else {
print(error)
return
}
self.imageCache.setObject(newImage, forKey: imageUrl?.absoluteString as AnyObject)
DispatchQueue.main.async {
self.image = newImage
}
})
task.resume()
}
}
我不知道为什么这给我一个错误。有人能帮助我吗?
1条答案
按热度按时间xxb16uws1#
当编译器无法推断并随后验证代码中的类型时,通常会发生此错误。在这种情况下,您将调用
所以这个方法需要一个
String
作为参数。但是你调用它的时候使用了一个可选的product?.productImage!
参数(!
不会覆盖类的?
,所以它仍然是可选的。您需要正确处理可选
您可能也需要重新考虑缓存。您使用了一个local参数来保存该高速缓存,因此每次创建类的一个新示例时,都会创建一个新的空缓存。而且imageView也不是缓存的最佳位置;请考虑将所有网络和缓存提取到一个专用控制器。