如何使用 SDImageView 在 TableViewCell 中下载 URL?

How do I use SDImageView to download URL within a TableViewCell?

我正在尝试使用带有 table 视图的 SDImageView Cocoapod 从数据库中检索 URL 并将其转换为可视图像。当我使用下面的代码时,我没有在 return 中获取图像,我的代码有什么问题?谢谢!

var posts = [postStruct]()


override func viewDidLoad() {
    super.viewDidLoad()

    let ref = Database.database().reference().child("Posts")

    ref.observeSingleEvent(of: .value, with: { snapshot in

        print(snapshot.childrenCount)

        for rest in snapshot.children.allObjects as! [DataSnapshot] {

            guard let value = rest.value as? Dictionary<String,Any> else { continue }
            guard let  title = value["Title"] as? String else { continue }
            guard let  downloadURL = value["Download URL"] as? String else { continue }


            let post = postStruct(title: title, downloadURL: downloadURL)

            self.posts.append(post)

        }
        self.posts = self.posts.reversed(); self.tableView.reloadData()

    })

}


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return posts.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
    let imageView = cell?.viewWithTag(200) as! UIImageView

   imageView.sd_setImage(with: URL(string: "downloadURL"), placeholderImage: UIImage(named: "placeholder.png"))

    let label1 = cell?.viewWithTag(1) as! UILabel
    label1.text = posts[indexPath.row].title
    return cell!

}

您需要将 SDWebimage 语法更改为 ->

var posts = [postStruct]()
var  downloadURL : String = ""

override func viewDidLoad() {
    super.viewDidLoad()

    let ref = Database.database().reference().child("Posts")

    ref.observeSingleEvent(of: .value, with: { snapshot in

        print(snapshot.childrenCount)

        for rest in snapshot.children.allObjects as! [DataSnapshot] {

            guard let value = rest.value as? Dictionary<String,Any> else { continue }
            guard let  title = value["Title"] as? String else { continue }
              downloadURL = value["Download URL"] as? String ?? ""


            let post = postStruct(title: title, downloadURL: downloadURL)

            self.posts.append(post)

        }
        self.posts = self.posts.reversed(); self.tableView.reloadData()

    })

}


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return posts.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
    let imageView = cell?.viewWithTag(200) as! UIImageView

    imageView.sd_setImage(with: URL(string: downloadURL), placeholderImage: UIImage(named: "placeholder.png"))

    let label1 = cell?.viewWithTag(1) as! UILabel
    label1.text = posts[indexPath.row].title
    return cell!

}

其中 downloadURL 为 url String.

您首先需要从数组中选取 postStruct,然后是 downloadURL。用这个改变你的 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 方法。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
    let imageView = cell?.viewWithTag(200) as! UIImageView

    let post = self.posts[indexPath.row];
    imageView.sd_setImage(with: URL(string: post.downloadURL), placeholderImage: UIImage(named: "placeholder"))

    let label1 = cell?.viewWithTag(1) as! UILabel
    label1.text = posts[indexPath.row].title
    return cell!
}