           }
           
           self.imageCache.setObject(image, forKey: imagePath as NSString)
-          cell.imageView.image = image
+          self.fadeImageView(cell.imageView, to: image, with: 0.5)
         }
       }
     } else {

    if let imagePath = result.imagePath {
      
      if let cachedImage = self.imageCache.object(forKey: imagePath as NSString) {
        cell.imageView.image = cachedImage
      } else {
        ImageLoader.loadImage(from: imagePath) { (image, error) in
          guard let image = image, error == .noError else {

  }
}

// MARK: - Private Helpers
fileprivate extension ListViewController {
  func fadeImageView(_ imageView: UIImageView, to newImage: UIImage, with duration: TimeInterval) {
    UIView.transition(with: imageView,
                      duration: duration,
                      options: .transitionCrossDissolve,
                      animations: {
                        imageView.image = newImage
    },
                      completion: nil)
  }
}

// MARK: - Activity Presentor Protocol
extension ListViewController: ActivityIndicatorPresentor {
}
