【问题标题】:How to save Firebase Data into an Array如何将 Firebase 数据保存到数组中
【发布时间】:2018-04-30 23:37:12
【问题描述】:

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

【问题讨论】:

  • 最后一行,底部打印语句将在括号内的打印语句之前打印。最后一行在 ref? 之后立即运行。观察...它会在括号内的所有内容运行之前打印

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


【解决方案1】:

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

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

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

数据被获取您需要使用 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)

【讨论】:

  • 这个答案对你有帮助吗,如果是,你可以接受这个答案并关闭这个帖子,否则你可以为其他人发布解决方案并接受,谢谢
猜你喜欢
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 2019-01-23
  • 2021-06-25
  • 2018-06-24
  • 1970-01-01
相关资源
最近更新 更多