Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将Firebase数据保存到阵列中_Ios_Arrays_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

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

Ios 如何将Firebase数据保存到阵列中,ios,arrays,swift,firebase,firebase-realtime-database,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" 我试图遍历数据字典中的所有用户,并将用户名附加到文件中的列表中,以用于其他目的。我创建了一个字符

我有一个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时,我可以看到每个元素都被添加了,但是当我最后一次在括号外打印它时,它显示为一个空数组。我认为元素仅附加在这些括号的范围内,因此我无法访问其他任何地方的填充数组。我该如何解决这个问题,以便使用我附加的数据?

您正在使用打印(self.userslist)在observer外部,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)

最后一行,底部的print语句将在括号内的print语句之前打印。最后一行紧跟在ref?之后?。观察。。。它会在括号内的所有内容运行之前打印出来。这个答案对你有帮助吗?如果是,你可以接受这个答案并关闭这个线程,否则你可以为其他人发布解决方案并接受,谢谢