Есть несколько способов go об этом, но сначала краткое описание проблемы:
Оператор возврата в закрытии будет выполняться до загрузки этого образа - функции Firebase асинхронны и кодируют должен быть обработан таким образом, чтобы у вас было время для загрузки и получения данных из inte rnet. Поэтому не пытайтесь возвращать данные из асинхронных функций.
Вот код, переписанный с помощью обработчика завершения. Этот обработчик будет вызываться только после полной загрузки образа.
func getImageEvent (imagePath: String, completion: @escaping(UIImage) -> Void) {
var myImage : UIImageView?
let storageRef = Storage.storage().reference(withPath: imagePath)
storageRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
if let error = error {
print(error.localizedDescription)
return
}
if let data = data {
if let myImage = UIImage(data: data) {
completion(myImage)
}
}
}
}
, и ключ в том, как вызвать эту функцию. Обратите внимание, что этот код ожидает данных (UIImage), которые будут переданы обратно в его закрытие, и сообщает, что получение изображения завершено.
self.getImageEvent(imagePath: "9U4BoXgBgTTgbbJCz0zy/eventMainImage.jpg", completion: { theImage in
print("got the image!")
})
Вам следует добавить дополнительную проверку ошибок, если изображение не было скачал или myImage был ноль. Передача сообщения об ошибке вместе с nil myImage была бы одной из опций, или сделать объект переданным обратно как необязательный, а затем проверка на nil в self.downloadImageAtPath
была бы другой.