Swift TableView 对图像发出多个网络请求

Posted

技术标签:

【中文标题】Swift TableView 对图像发出多个网络请求【英文标题】:Swift TableView making multiple network requests for images 【发布时间】:2017-10-10 01:40:39 【问题描述】:

我在swift中有一张桌子。每当我向上和向下滚动 tableview 时,即使图像已经加载,它也会再次运行 getImageForCell 函数。有没有办法让这种情况不发生。下面是我的代码。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "ReviewTableViewCell", for: indexPath) as! ReviewTableViewCell

    let review = json[reviewType][indexPath.row]
    cell.nameLabel.text = review[userType]["name"].stringValue
    cell.reviewLabel.text = review["message"].stringValue
    cell.dateLabel.text = review["created_at"].stringValue
    cell.ratingStars.rating = Double(review["rating"].intValue)
    getImageForCell(url: review[userType]["photo_url"].stringValue, cell: cell)

    return cell


func getImageForCell(url: String, cell: ReviewTableViewCell) 
    Alamofire.request(url).responseImage  response in
        if let downloadedImage = response.result.value 
            print("downloaded image \(downloadedImage)")
            DispatchQueue.main.async 
                cell.profileImageView.image = downloadedImage
            
        
    

【问题讨论】:

"有没有办法避免这种情况发生" 您希望有什么替代方案? 他的意思是他不想每次都要下载图片,而是使用缓存的图片来避免网络调用。 查看此链接:***.com/questions/45316099/… github.com/rs/SDWebImage 这个库提供了一个支持缓存的异步图片下载器。 【参考方案1】:

这是因为既没有缓存图像,也没有重复使用单元格 - 在您看来,您每次都在重新创建单元格 - 这不会专门解决图像问题,但会提高性能。我最喜欢的缓存图片扩展是 kingfisher(没有隶属关系),虽然 alamofire 也可以用来缓存图片。

https://github.com/onevcat/Kingfisher

【讨论】:

以上是关于Swift TableView 对图像发出多个网络请求的主要内容,如果未能解决你的问题,请参考以下文章

多个位置的相同TableView swift 3

在 TableView Swift 3 上设置值

在 Swift 中加速 TableView 加载 JSON

单击另一个按钮 swift 2.2 更改声音按钮图像

Swift 3:tableView 复制从 Firebase 加载的图像

Swift 4 TableView Cell 不显示正确的图像