извлеченные данные не добавляются в мой массив swift4 - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь добавить "извлеченные данные -Keys- из firebase" в массив, но это не работает

Это вывод цикла # 2 для извлеченных ключей

image

Это ключи от пожарной базы

image

Это код

let ref = Database.database().reference()
        ref.child("Faculty ").observe(.value, with: { (snapshot) in
            if let result = snapshot.children.allObjects as? [DataSnapshot] {
                for child in result {
                    let FacultyName = child.key as! String
                    print(FacultyName)
                    self.NamesofFac.append(FacultyName)

                }
            }
        })

        for i in 0...self.NamesofFac.count {
            print(self.NamesofFac.count)
            print(" line")
            print(self.NamesofFac)

1 Ответ

0 голосов
/ 02 марта 2019

Проблема, с которой вы столкнулись, заключается в том, что функция Firebase Observe отправляет обратный вызов в виде (снимка).

Требуется немного времени, чтобы зайти в Интернет, чтобы получить данные, поэтому Firebase возвращает данные асинхронно.Поэтому ваш код в цикле for будет запущен до того, как будут возвращены ваши данные о базе данных.Во время выполнения кода цикла for массив все еще пуст.Но код цикла for в отдельной функции, как вы видите в моем примере кода, и вызывайте его сразу после цикла for внутри вашего firebase наблюдать за вызовом.

Попробуйте вместо этого:

override func viewDidLoad() {
    getFirebaseData()
}
func getFirebaseData() {
    let ref = Database.database().reference()
    ref.child("Faculty ").observe(.value, with: { (snapshot) in
        if let result = snapshot.children.allObjects as? [DataSnapshot] {
            for child in result {
                let FacultyName = child.key as! String
                print(FacultyName)
                self.NamesofFac.append(FacultyName)

            }
            printNames()
        }
    })
}



func printNames() {
    for i in 0...self.NamesofFac.count {
        print(self.NamesofFac.count)
        print(" line")
        print(self.NamesofFac)
    }
}

Этоесли он не будет печатать имена, пока они не будут полностью загружены из firebase.

PS: Ваши соглашения об именах неверны.Вы, кажется, называете переменные заглавными буквами.Переменные должны быть верблюжьими.Классы должны начинаться с заглавной буквы.

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