Примечание. Пожалуйста, никаких библиотек. Это важно для меня, чтобы учиться. Кроме того, есть множество ответов на это, но ни один из них, который я нашел, не решает проблему. Не указывайте в качестве дубликата. Спасибо заранее!
Проблема заключается в том, что если вы быстро прокрутите в таблице, вы увидите старые изображения и мерцание.
-  Решение вопросов, которые я прочитал, это отменить URLSessionзапрос данных. Но я не знаю, как это сделать в правильном месте и время. Могут быть другие решения, но не уверены.
Это то, что у меня есть до сих пор:
Класс кеша изображений
class Cache {
    static let shared = Cache()
    private let cache = NSCache<NSString, UIImage>()
    var task = URLSessionDataTask()
    var session = URLSession.shared
    func imageFor(url: URL, completionHandler: @escaping (image: Image? error: Error?) -> Void) {
            if let imageInCache = self.cache.object(forKey: url.absoluteString as NSString)  {
                completionHandler(image: imageInCache, error: nil)
                return
            }
            self.task = self.session.dataTask(with: url) { data, response, error in
                if let error = error {
                    completionHandler(image: nil, error: Error)
                    return
                }
                let image = UIImage(data: data!)
                    self.cache.setObject(image, forKey: url.absoluteString as NSString)
                    completionHandler(image: image, error: nil)
                }
            self.task.resume()
    }
}
Использование
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    let myImage = images[indexPath.row]
    if let imageURL = URL(string: myImage.urlString) {
        photoImageView.setImage(from: imageURL)
    }
    return cell
}
Любые мысли?
