SWIFT: при сопоставлении информации Firebase объекту объекты не добавляются в массив после возврата, почему? - PullRequest
1 голос
/ 04 августа 2020

Привет, я новичок в Swift / Firebase и немного не понимаю, почему города пусты после возврата в них объектов. Я прошел через него, и создается новый город, но после того, как он выполнит все объекты города, города отображаются как пустые. Что может быть причиной этого? Идея состоит в том, чтобы получить имя и изображение (из Firebase Storage), создать на их основе новый объект City, а затем получить массив этих объектов, к которому я могу получить доступ из другого класса.

 self.cities = documents.map { queryDocumentSnapshot-> City in
                let data = queryDocumentSnapshot.data()
                let cityName = data["name"] as? String ?? ""

                var cityImage: UIImage = UIImage()
                let httpsRef = Storage.storage().reference(forURL: (data["image"] as! String))
                httpsRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
                    if let error = error {
                        print("ERROR!!! \(error)")
                    } else {
                        cityImage = UIImage(data: data!)!
                    }
                }
                
                return City(name: cityName, image: cityImage)
            }

1 Ответ

0 голосов
/ 04 августа 2020

httpsRef.getData() является асинхронным и возвращается немедленно, прежде чем данные объекта станут доступны. Предоставленный вами обратный вызов вызывается через некоторое время после получения данных. Между тем, при закрытии карты возвращается новый объект City с начальным значением cityImage, которое вы указали перед вызовом getData(). Ваш код необходимо будет переписать, чтобы учесть асинхронный характер getData(), возможно, выполняющийся в несколько этапов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...