Brewski
Brewski

Reputation: 684

Error loading image from Firebase to my Table View

I want to load my images from Firebase to my Table View but I get the error:

Cannot convert value of type 'String' to expected argument type 'URL'

When I print the object on its own it is definitely a URL.

This is what my code looks like:

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
}

Upvotes: 0

Views: 36

Answers (1)

Michael Dautermann
Michael Dautermann

Reputation: 89509

To display the image in your cell, you need to convert the URL string into an actual URL object, which you can do via:

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)")
    }
}

And as rmaddy implies, your performance is not going to be very good (because depending on how far away the remote server is or how slow the internet is), the synchronous "Data(contentsOf:" call might take an unacceptably long time to succeed. I'm just providing this answer so you will be able to see something in your own testing, but I wouldn't use this in production code.

Try to replace the Data fetch with an asynchronous URLSession task, and you can find much more information in this very related question.

Upvotes: 1

Related Questions