首页 文章

如何将Firebase数据保存到阵列中

提问于
浏览
2

我有一个Firebase数据库,其建模如下:

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

我试图遍历数据字典中的所有用户,并将用户名附加到文件中的列表中以用于其他目的 . 我创建了一个字符串数组(userslist)变量,在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 回答

  • 1

    您在观察者之外使用 print(self.userslist) ,而Firebase在异步模式下运行

    所以,如果你使用 breakpoints ,你会注意到

    在控制到达 Database handler 之前调用 print(self.userslist)

    数据是 getting fetched 您需要使用 Dispatch main queue 在该处理程序中加载视图

    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)
    

相关问题