Я знаю, что этот тип вопроса задавался 1e7 раз, но я столкнулся с конкретной проблемой, которая, как мне кажется, не была рассмотрена / явно очевидна, но я слишком новичок, чтобы решить ее самостоятельно.
У меня есть следующий фрагмент кода в моем методе cellForRowAt
в TableViewController
:
let currentDictionary = parser.parsedData[indexPath.row] as Dictionary<String,String>
let urlString = currentDictionary["media:content"]
if urlString != nil {
let url = NSURL(string: urlString!)
DispatchQueue.global().async {
let data = try? Data(contentsOf: url! as URL) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
DispatchQueue.main.async {
cell.thumbnailImageView.image = UIImage(data: data!)
}
}
}
Выполняется нормально, загружает изображения и присваивает их UIImageView
каждого tableViewCell
.
При прокрутке таблицы существует конечная задержка, так как изображения загружаются «на лету», так сказать.
Я хочу предварительно загрузить все эти изображения и сохранить их в структуре данных, чтобы они реже выбирались из URL.
Я пробовал следующую реализацию:
var thumbnail = UIImage()
for item in parser.parsedData {
let currentDictionary = item as Dictionary<String,String>
let title = currentDictionary["title"]
let link = currentDictionary["link"]
let urlString = currentDictionary["media:content"]
let url = NSURL(string: urlString!)
if urlString != nil {
let url = NSURL(string: urlString!)
DispatchQueue.global().async {
let data = try? Data(contentsOf: url! as URL)
DispatchQueue.main.sync {
thumbnail = UIImage(data: data!)!
}
}
}
var newsArticle: News!
newsArticle = News(title: title!, link: link!, thumbnail: thumbnail)
news.append(newsArticle)
Где новости - это моя структура данных. Этот код также выполняется нормально, однако каждый эскиз представляет собой изображение размером 0x0, размер {0, 0}, ориентация 0, масштаб 1.000000, согласно выводу консоли.
У кого-нибудь есть идеи, как загрузить эти изображения, но не назначать их сразу на UIImageView
, а хранить их для дальнейшего использования?