将图像从Firebase加载到我的表视图时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将图像从Firebase加载到我的表视图时出错相关的知识,希望对你有一定的参考价值。

我想将我的图像从Firebase加载到我的表视图但是我收到错误:

无法将“String”类型的值转换为预期的参数类型“URL”

当我自己打印对象时,它肯定是一个URL。

这就是我的代码:

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "FeedItem", for: indexPath) as! FeedItem

    //TODO: Guard...

    let postImage = postArray [indexPath.row]
    let postImageURL = postImage.postImageURL
    let data = Data(contentsOf: postImageURL) // Line with Error

    cell.postImage.image = UIImage (data: data)
    return cell
}
答案

要在单元格中显示图像,您需要将URL字符串转换为实际的URL对象,您可以通过以下方式执行此操作:

let postImage = postArray[indexPath.row]
if let postImageURL = URL(string: postImage.postImageURL)
{
    do {
         let data = try Data(contentsOf: postImageURL)
         cell.postImage.image = UIImage (data: data)
    } catch {
         print("error with fetching from (postImageURL.absoluteString) - (error)")
    }
}

正如rmaddy暗示的那样,你的表现不会很好(因为取决于远程服务器的距离或互联网的速度有多慢),同步“Data(contentsOf:”调用可能会花费不可接受的长时间才能成功。我只是提供这个答案,所以你可以在自己的测试中看到一些东西,但我不会在生产代码中使用它。

尝试用异步Data任务替换URLSession fetch,你可以找到更多信息in this very related question

以上是关于将图像从Firebase加载到我的表视图时出错的主要内容,如果未能解决你的问题,请参考以下文章

从firebase检索图像以在片段中的回收器视图时出错

未将图像从 json 文件加载到我的列表视图

从firebase异步加载图像时出错

将 Firebase 数据从一个视图控制器传递到详细视图控制器

尝试将图像上传到 Firebase 存储时出错

图像视图随 Firebase 适配器不断变化