几天来,我一直试图从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)")
}
})
}
在Android上,我没有这个问题,但是由于我是iOS的新手,所以我很难应付。任何帮助都将受到欢迎。谢谢
目前,您正在观察数据库的不断变化,并且只有在将子项/值添加到当前检查的位置时,数据库才会运行,为此,您可能只想一次检索一次值,视图已加载,然后它将再次从数据库中获取。它效率更高,成本更低。您可能想要这样的东西:
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
然后使用该强制转换访问嵌套的值。
如果它们不是嵌套的,并且与您在数据库引用中所查看的位置处于同一级别,例如,例如,在上面,我们正在数据库中的主题> 0>段落> 0节点中查找。标题是该节点内的值,而不是子节点,因此我们可以简单地通过返回的数据快照从数据库中获取标题的值。
我建议阅读Docs,当使用不同的OS /语言时,它们非常好并且易于理解。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句