Как сохранить данные Firebase в массив - PullRequest
0 голосов
/ 01 мая 2018

У меня есть база данных Firebase, которая смоделирована как:

: users
    : some-random-id-1
        - username:"user1"
        - email:"email1@gmail.com"
    : some-random-id-2
        - username:"user2"
        - email:"email2@gmail.com"

Я пытаюсь перебрать всех пользователей в словаре данных и добавить имя пользователя в список в файле, который будет использоваться для других целей. Я создал строковый массив (список пользователей) и в viewdidload () написал следующий код:

    ref = Database.database().reference()
    ref?.observe(.value, with: { (snapshot) in
        let dataDict = snapshot.value as! NSDictionary
        let x = dataDict["users"] as! NSDictionary
        print(x)
        print("--------")
        for user in x{
            let y = user.value as? [String: String]
            let z = y!["username"]
            print(z)
            self.userslist.append(z!)
            print(self.userslist)
            print("NEXT")
        }
    })
    print(self.userslist)

Внутри скобок снимка, когда я печатаю self.userslist, я вижу, что каждый элемент добавляется, но когда я в последний раз печатаю его вне скобок, он показывает его как пустой массив. Я думаю, что элементы добавляются только в области этих скобок, поэтому я не могу получить доступ к заполненному массиву в другом месте. Как мне обойти это, чтобы я мог использовать данные, которые я добавил?

1 Ответ

0 голосов
/ 01 мая 2018

вы используете print (self.userslist) вне наблюдателя, и Firebase работает в асинхронном режиме

Итак, если вы используете точек останова , вы заметите, что

print(self.userslist) Вызывается до того, как элемент управления достигнет Обработчик базы данных ,

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

    ref?.observe(.value, with: { (snapshot) in
            let dataDict = snapshot.value as! NSDictionary
            let x = dataDict["users"] as! NSDictionary
            print(x)
            print("--------")
            for user in x{
                let y = user.value as? [String: String]
                let z = y!["username"]
                print(z)
                self.userslist.append(z!)
                print(self.userslist)
                print("NEXT")
            }
            /// Here is your data
            print(self.userslist)
        })
 /// Called before Handler execution
 print(self.userslist)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...