Очень часто мы таскаем изображения по сетке и присваиваем их для UImageView. При этом приходится писать кучу лишнего кода для получения даты для картинки, преобразование ее в саму картинку, передавать управление потока в основной и так далее…
Все это можно решить достаточно просто, если помнить про расширения базовых классов!
К примеру, вот такой кусочек кода сильно облегчает работу с приведенным примером:
extension UIImageView {
func downloadedFrom(link:String) {
guard let url = URL(string: link) else { return }
URLSession.shared.dataTask(with: url, completionHandler: { (data, _, error) -> Void in
guard let data = data , error == nil, let image = UIImage(data: data) else { return }
DispatchQueue.main.async { () -> Void in
self.image = image
}
}).resume()
}
}
По традиции небольшой пример использования:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
cell?.imageView?.downloadedFrom(link: "http://swiftbook.ru/sites/default/files/images/ivan.png")
return cell!
}
Ну и как результат, немного Ивана вам в ленту :