Невозможно получить доступ к переменной внутри закрытия swift - PullRequest
0 голосов
/ 22 декабря 2019

Я пытаюсь получить данные моей базы данных firebase в переменную, чтобы использовать их в моем проекте

var someArray = [Array]()
let dbRef = Database.database().reference().child("SomeDatabase")


func loadSomeDatabaseData {
   dbRef.observeSingleEvent(of: .value) { (snapshot) in
       let someDict = snapshot.value as! [String:Any]
       let keysOfSomeDict = Array(someDict.keys)
       self.someArray.append(contentsOf: keysOfSomeDict)
       self.collectionView?.reloadData()
   }
}

Я пытался вызвать loadSomeDatabaseData () в моей viewDidload с последующей печатью someArray, в результате чегов пустом массиве. Я знаю, что массив keysOfSomeDict содержит правильные данные, которые мне нужны, поскольку я попытался распечатать этот массив непосредственно внутри замыкания. Однако я также хотел бы иметь возможность распечатывать и использовать эти данные в другом месте моего приложения.

1 Ответ

0 голосов
/ 22 декабря 2019

observeSingleEvent является асинхронным. Таким образом, немедленная печать someArray после вызова loadSomeDatabaseData приведет к пустому массиву. Для извлечения данных из API Firebase требуется некоторое время.

Чтобы использовать эти данные в другом месте приложения, вы можете установить флаг, указывающий, что данные загружены, или отправить уведомление, чтобы сообщить, что данные доступны.

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