在这里下载图像并将其存储在缓存中就可以了。问题在于更新tableview单元格。
当表格视图将单元格加载到表格上时,图像尚未下载。但是,一旦下载了图像,我们就必须有选择地更新单元格,以便立即显示图像。
由于正在滚动,因此表视图再次调用“ cellForRowatIndexpath”,这将更新滚动时显示已下载图像的单元格。
如果您仍然希望使用扩展名,建议您添加tableView和indexpath作为参数,以便我们可以调用重新加载特定行并立即更新视图。
我已经更新了表重载代码和扩展中定义的函数的结构。让我知道事情的后续。
let imageCache = NSCache<AnyObject, AnyObject>()var imageURLString : String?extension UIImageView {public func imageFromServerURL(urlString: String, tableView : UITableView, indexpath : IndexPath)) { imageURLString = urlString if let url = URL(string: urlString) { image = nil if let imageFromCache = imageCache.object(forKey: urlString as AnyObject) as? UIImage { self.image = imageFromCache return } URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in if error != nil{ print(error as Any) return } DispatchQueue.main.async(execute: { if let imgaeToCache = UIImage(data: data!){ if imageURLString == urlString { self.image = imgaeToCache } imageCache.setObject(imgaeToCache, forKey: urlString as AnyObject)// calls when scrolling tableView.reloadRows(at: [indexpath], with: .automatic) } }) }) .resume() }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)