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

时间:2018-04-30 23:37:12

标签: ios arrays swift firebase firebase-realtime-database

我有一个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 个答案:

答案 0 :(得分:1)

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

因此,如果您使用断点,您会注意到

控件到达数据库处理程序之前调用

static void hello(Integer... x){ System.out.println(x.length); } public static void hi(){ Integer[] xIntegers= new Integer[44]; hello(xIntegers); }

获取数据您需要使用调度主队列

在该处理程序中加载您的视图
print(self.userslist)