Swift. Как отобразить картинку с сервера в UIImageView?
Всем привет! У меня в приложении хранится ответ GET запроса с массивом треков(название трека, исполнитель и ссылка на картинку). Эту информацию я хочу поместить в свою кастомную ячейку и вывести списком в таблице. название трека и исполнитель без проблем добавляются в label-ы. А вот с картинкой у меня проблемы, уже кучу примеров посмотрел, но все равно не получается добавить картинку в UIImageView.
Создание ячейки:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TrackTableViewCell
guard let data = data else { return cell}
// тут пытался получить картинку
if let url = URL(string: (data[indexPath.row].artworkUrl100)!) {
if let data = try? Data(contentsOf: url) {
cell.imageTrack = UIImage(data: try! Data(contentsOf: data))
}
}
cell.trackName.text = data[indexPath.row].trackName
cell.artistName.text = data[indexPath.row].artistName
return cell
}
Ответы (1 шт):
Автор решения: Dante
→ Ссылка
Добавил URLSession для картинок при создании ячейки и все заработало, картинки тоже начали подгружатся.
Код создания ячейки после исправления:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TrackTableViewCell
guard let data = data else { return cell}
guard let apiURL = URL(string: data[indexPath.row].artworkUrl100!) else { return cell }
URLSession.shared.dataTask(with: apiURL) { data, _, _ in
guard let data = data else { return }
DispatchQueue.main.async {
cell.imageTrack.image = UIImage(data: data)
}
} .resume()
cell.trackName.text = data[indexPath.row].trackName
cell.artistName.text = data[indexPath.row].artistName
return cell
}