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

Posted

技术标签:

【中文标题】使用 SwiftUI Xcode 11 从 firebase 实时数据库中检索数据【英文标题】:Retrieving data from firebase Realtime Datbase with SwiftUI Xcode 11 【发布时间】:2020-07-09 20:28:22 【问题描述】:

几天来,我一直试图从 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 新手,所以我很难应对。 欢迎任何帮助。谢谢

【问题讨论】:

那么一个主题在你的数据库中被标记为一个数字? 是的,比如从 0 到 6 的表格 【参考方案1】:

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

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)

您认为每个带有节点的子节点都是一个数组或 json 对象。您可以将它们转换为 NSDictionary 并使用该转换来访问其中的值(如果它们是嵌套的)。

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

我推荐阅读Docs,它们非常好,并且在使用不同的操作系统/语言时易于理解。

【讨论】:

感谢 Nathan 的快速回复。我想按顺序获取所有主题,然后将它们放在 tableView 中,然后对段落执行相同操作。我应该对所有主题和段落都这样做吗?而且我也不知道如何在 xcode 控制台中记录数据? 是的,这就是您可以做到的方式,显然您将其更改为数据库的布局,因为我不知道它们的整个布局。但这是每次视图加载时检索数据的好方法。要按顺序排列每个主题,因为它们从 0 开始编号,那么您可以只使用 for 循环并使用索引指向数据库中的正确位置。要在控制台中查看内容,您只需简单地执行打印(无论在这里,例如查看数据的变量) 这就是我试图用 for 部分做的,但我不知道这是否有效,因为控制台显示了一些非常有线的东西 那么它显示了什么?把输出发给我?如果我不知道,我无能为力 我将屏幕截图添加到 post cf 控制台屏幕

以上是关于使用 SwiftUI Xcode 11 从 firebase 实时数据库中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 11 游乐场中使用 SwiftUI

Xcode 11 PDF 图像资产“保留矢量数据”在 SwiftUI 中不起作用?

SwiftUI 与 Firebase 使用 Xcode 11 GM 种子 2 - Swift UI Firestore

在 Xcode11 Beta 4 中将 String(format: , args) 与 SwiftUI 一起使用时出错

Xcode 11 未在 SwiftUI 中显示对象库

Xcode 11 - SwiftUI 预览暗模式 [重复]