Я создаю список песен. Я использую UITableViewController, я загружаю JSON, анализирую его, а затем показываю его, проблем нет. Затем я хочу загрузить изображение обложки через http для своих ячеек, у меня нет проблем с его реализацией. Моя проблема в том, что, если я прокручиваю слишком быстро до дна (там около 300 песен), я вижу, что UIImageView циклически переключается на все изображения, которые он должен был загрузить. Что логично, так как они используются повторно, и я никогда не останавливал их от загрузки. Мой код выглядит следующим образом:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "PlaylistItem", for: indexPath) as! PlaylistItemCell
let song = self.playlistViewModel!.songs[indexPath.row]
cell.artistLabel?.text = song.artist
cell.titleLabel?.text = song.title
let url = URL(string: "https://mydomain.dom/api/songs/images/" + song.id + "/a/6400/")
cell.coverImage.image = imageCache[url!.absoluteString]
if cell.coverImage.image == nil {
getSongCover(url:url!) { (success, image) in
imageCache[url!.absoluteString] = image
DispatchQueue.main.async {
cell.coverImage.image = image
}
}
}
return cell
}
Итак, в основном, у меня есть кэш изображений:
var imageCache: [String: UIImage] = [:]
Я пытаюсь загрузить свой UIImageView изображением из него, если это не таксуществует, я загружаю его, а затем подаю его в UIImageView. Я понимаю, что при повторном использовании ячеек изображения загружаются и отображаются последовательно в последнем «использовании» ячейки. Но как я могу избежать этого?