Поскольку вы не сказали, по какой строке происходит исключение, я думаю, что это происходит по этой строке.
let images = quizzesImages[indexPath.row]
Проблема в downloadQuizzes
.Там вы звоните prepareImages
, а через пару строк звоните reloadData
.Поскольку prepareImages
выполняет асинхронную задачу, downloadQuizzes
не блокирует завершение работы.Это заставляет reloadData
вызываться до завершения асинхронной части prepareImages
.
Вам необходимо убедиться, что prepareImages
завершен, прежде чем вызывать reloadData
.
Другим вариантом является использование библиотеки, такой как Kingfisher, которая будет загружать изображения только тогда, когда они должны быть отображены в ячейке, а не загружать их все и замедлять отображение таблицы.
Дополнительные примечания:
Вы не должны использовать Data(contentsOf:)
для загрузки удаленного контента, URLSession
является правильным вариантом для него.