ios - 检索到的数据没有附加到我的数组 swift4

标签 ios arrays swift firebase-realtime-database

我正在尝试将“从 firebase 检索到的数据 -Keys-”附加到一个数组中,但它不起作用

这是 for 循环输出 #2 检索到的键

这是来自 firebase 的 key

这是代码

let ref = Database.database().reference()
        ref.child("Faculty ").observe(.value, with: { (snapshot) in
            if let result = snapshot.children.allObjects as? [DataSnapshot] {
                for child in result {
                    let FacultyName = child.key as! String
                    print(FacultyName)
                    self.NamesofFac.append(FacultyName)

                }
            }
        })

        for i in 0...self.NamesofFac.count {
            print(self.NamesofFac.count)
            print(" line")
            print(self.NamesofFac)

最佳答案

您遇到的问题是 Firebase Observe 函数以(快照)的形式提供回调。

去web获取数据需要一点时间,因此firebase异步返回数据。因此,您的 for 循环中的代码将在您的 firebase 数据返回之前运行。在您的 for 循环代码运行时,数组仍然是空白的。但是 for 循环代码在一个单独的函数中,正如您在我的示例代码中看到的那样,并在您的 firebase observe 调用中的 for 循环之后直接调用它。

试试这个:

override func viewDidLoad() {
    getFirebaseData()
}
func getFirebaseData() {
    let ref = Database.database().reference()
    ref.child("Faculty ").observe(.value, with: { (snapshot) in
        if let result = snapshot.children.allObjects as? [DataSnapshot] {
            for child in result {
                let FacultyName = child.key as! String
                print(FacultyName)
                self.NamesofFac.append(FacultyName)

            }
            printNames()
        }
    })
}



func printNames() {
    for i in 0...self.NamesofFac.count {
        print(self.NamesofFac.count)
        print(" line")
        print(self.NamesofFac)
    }
}

这是在它们从 firebase 完全加载之前不会打印名称。

PS:您的命名约定不正确。您似乎在用大写字母命名变量。变量应该是驼峰式的。类应以大写开头。

关于ios - 检索到的数据没有附加到我的数组 swift4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54957114/

相关文章:

ios - 连接到 iBeacon

ios - xctool 无法使用请求的 iOS 版本运行

iOS:不会调用委托(delegate)回调

sql - Snowflake 中有等效的 jsonb_array_elements 吗?

ios - 如何通过跳过选项卡栏 Controller 将数据从 VC 传递到另一个

ios - 获取隐式中心值 Titanium

c - 如何通过 x86 程序集访问整数数组中的元素

javascript - 如何正确处理 Promise.all : Getting undefined

ios - 如何监听 ObservableObject

swift - 在 Swift 函数设计中什么时候应该有参数标签,什么时候应该省略参数标签?