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