将图像下载到 TableView [Swift]

Download image to TableView [Swift]

我有一个包含以下文件的 swift 项目:

ViewController.swift 其中主要包含一个 table 视图,其中下载了来自 Firebase 的数据

ViewControllerTableViewCell.swift 其中包含 tableView

的出口

DataModel.swift 其中包含 Firebase 数据的模型

在 table 中,我在 imageView 旁边添加了一些标签,其中填充了来自 Firebase 的数据。图像的 URL 在 ViewController.swift 文件中作为 authorAvatarUrl 在其他字符串旁边接收来自 Firebase。完成此过程后,数据将附加到列表 (self.dataList.append(downloadeddata)) 并重新加载 table:

self.tableViewData.reloadData()

如何下载图像并将其显示在 imageView 中(位于 table 单元格内)?

我试过了

// Declare variable
var cellViewController = ViewControllerTableViewCell()

[...]

// Download author's avatar
let avatarURL = URL(string: authorAvatarUrl as! String)
                Alamofire.request(avatarURL!).responseData { (response) in

                    if response.error == nil {

                        if let data = response.data {

                            self.cellViewController.profileImageView.image = UIImage(data: data)

                        }

                    }

                }

但是在 ViewController.swift 文件中,这不起作用。

使用像 Kingfisher

这样的库

那么你只需使用:

let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)

如果我理解正确,您的代码可能存在问题,您没有引用当前显示在 TableView 中的 TableViewCell,而是您在 ViewController 但从未出现过。

您应该将执行网络请求的代码移动到 ViewControllerTableViewCell class 或 tableView(_:cellForRowAt:) 方法中,并且应该引用给定的单元格。

正如其他人所指出的,有许多库可以帮助您下​​载图像数据并设置 UIImageView;因为您已经在使用 Alamofire,所以您可以使用 AlamofireImage.

那么下载图片的最简单方法就是将此代码包含在您的 ViewController

var allAvatarURLs: [URL] = // the array containing all the avatars' url

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let row = indexPath.row
    let url = allAvatarURLs[row]
    let cell = tableView.dequeueReusableCell(withIdentifier: "<yourIdentifier>", for: indexPath) as! ViewControllerTableViewCell
    cell.profileImageView.image.af_setImage(withURL: url) // UIImageView extension in AlamofireImage
    return cell
}

其中 allAvatarURLs 包含所有图像' url。