Я хотел бы улучшить код ниже, чтобы кэшировать изображения и загружать их только в том случае, если они ранее не были кэшированы. Кажется, я не могу найти хороших примеров того, как использовать объект URLSession для этого.Как кэшировать изображения с помощью URLSession в Swift
extension UIImageView {
func loadImageWithURL(_ url: URL) -> URLSessionDownloadTask {
let session = URLSession.shared
let downloadTask = session.downloadTask(with: url, completionHandler: { [weak self] url, response, error in
if error == nil, let url = url,
let data = try? Data(contentsOf: url), let image = UIImage(data: data) {
DispatchQueue.main.async {
if let strongSelf = self {
strongSelf.image = image
}
}
}
})
downloadTask.resume()
return downloadTask
}
}
http://nshipster.com/nsurlcache/ –
Unrelated, ваш 'если пусть strongSelf = само {strongSelf.image = образ}' может быть упрощено до 'Я? .image = image'. – Rob
FWIW, 'NSURLCache' будет кэшировать в соответствии с тем, что поставляется в заголовках ответа сервера. Кроме того, он будет ограничивать кеш в соответствии с плохо документированными правилами, особенно если загрузка превышает 5% от общего кеша, она не будет кэшировать его, независимо от того, что говорят заголовки сервера (это одна из причин для уменьшения размера кеша как указано в ссылке Льва). – Rob