У меня есть массив строк, содержащий URL-адреса фотографий. У меня есть пользовательский макет, и мне нужно преобразовать массив строк в UIImage
, а затем получить их размер. Вот мой код:
extension PhotoFeedViewController: CustomLayoutDelegate {
func collectionView(_ collectionView: UICollectionView, sizeOfPhotoAtIndexPath indexPath: IndexPath) -> CGSize {
let bodyImage = UIImageView()
let url = URL(string: collectionPhotos[indexPath.row])
let data = try? Data(contentsOf: url!)
// DispatchQueue.main.async {
if let imageData = data {
bodyImage.image = UIImage(data: imageData)
}
// }
return bodyImage.image?.size ?? CGSize(width: 100, height: 100)
}
}
Этот код работает, но есть проблема. Когда я запускаю приложение, изображения появляются после того, как все изображения загружены, потому что все синхронно.
Если вы раскомментируете:
DispatchQueue.main.async {
Возвращенное свойство пустое и не видит код, который находится в блоке отправки
Как сделать этот код асинхронным, чтобы размер изображений передавался асинхронно, и пользователь не ждал полной загрузки изображений, отображаемых на экране? Без использования библиотек.
Извините за мой Engli sh.