使用 SwiftUI 从 firebase 实时数据库检索数据 Xcode 11

Retrieving data from firebase Realtime Datbase with SwiftUI Xcode 11

几天来,我一直试图从 firebase 读取我的数据,但没有成功。 实际上它是一组表也包含表。

这个功能是检索主题的同时检索段落

func getSubjects() {
    let subjectRef = database.child("subjects")
    subjectRef.observe(.childAdded, with: { (snapshot) in
        for child in snapshot.children {
            print(snapshot)
             if let snapshot = child as? DataSnapshot,
                let subject = Subject(snapshot.value)
            //subjectList.append(subject)
           // print("Data : \(subject)")
                
        }
    })
}

This is the firebase screen

Console screen

在 Android 我没有遇到这个问题,但由于我是 iOS 的新手,我很难应对。 欢迎任何帮助。谢谢

目前,您正在观察数据库的不断变化,只有当 child/value 添加到您当前正在检查的位置时,它才会 运行,为此您只能想要一次检索一个值,每次加载该视图时,它都会再次从数据库中获取。它的效率更高,成本更低。你可能想要这样的东西:

ref = Database.database().reference()
ref.child("subjects").child("0").child("paragraphs").child("0").observeSingleEvent(of: .value, with: { (snapshot) in
        let value = snapshot.value as? NSDictionary
        let location = value["location"] as? NSDictionary
        let title= value?["title"] as? String ?? ""
        let text = value?["text"] as? String ?? ""
        let latitude = location?["latitude"] as? String ?? ""
        let longitude = location?["longitude "] as? String ?? ""
    }) { (error) in
     print(error.localizedDescription)
}

你认为每个 child 内部都有节点作为一个数组,或者 json object。您可以将它们转换为 NSDictionary 并使用该转换访问它们内部的值(如果它们是嵌套的)。

如果它们没有嵌套并且与您在数据库中查看的位置处于同一级别参考,例如,上面我们正在数据库中查找主题 > 0 > 段落 > 0 节点。 Title 是该节点内的值而不是 child 因此我们可以通过返回的数据快照从数据库中简单地获取 title 的值。

我建议阅读 Docs,它们非常好并且在处理不同的 OS/languages 时很容易理解。