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

时间:2018-04-06 15:19:39

标签: ios swift uitableview

我想将我的图片从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
}

1 个答案:

答案 0 :(得分:1)

要在单元格中显示图像,您需要将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