使用 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 PDF 图像资产“保留矢量数据”在 SwiftUI 中不起作用?
SwiftUI 与 Firebase 使用 Xcode 11 GM 种子 2 - Swift UI Firestore
在 Xcode11 Beta 4 中将 String(format: , args) 与 SwiftUI 一起使用时出错