我想读取一个文档,从该文档中获取一个字段,并将一个变量设置为该字段的值
我希望写入在 Firebase getDocument 函数外部声明的变量。实际结果是该变量正在 Firebase getDocument 函数内写入,但在函数外部它为空。
这是我尝试过的:
[1]: 修改firebase函数中的变量 https://stackoverflow.com/questions/45742362/modifying-variable-within-firebase-function- 这对我不起作用,因为我无法用我目前的 Swift 技能很好地翻译它
[2]: 如何从 Firebase 快照设置变量(快速) https://stackoverflow.com/questions/40200217/how-to-set-variables-from-a-firebase-snapshot-swift- 这对我不起作用,因为实现与我现在所拥有的有很大偏差
//open the user Firebase database by documentID
let userDocument = userdb.collection("users").document(userDocumentId)
var userjobsData = [[String:Any]]()
userDocument.getDocument { (docums, error) in
if let docum = docums, docum.exists {
//grab all jobs data
userjobsData = docum.get("jobData") as! [[String:Any]]
//sort jobs by category in alphabetical order
userjobsData = (userjobsData as NSArray).sortedArray(using: [NSSortDescriptor(key: "category", ascending: true)]) as! [[String:AnyObject]]
}
//Here userjobsData contains data
print(userjobsData)
}
//Here userjobsData is empty
print(userjobsData)
实际上你的情况发生了什么Firebase
获取数据是asynchronous task
并且需要一些时间来获取数据,同时您正在阅读您的userjobsData
这是空的,因为Firebase
请求尚未完成。
您可以做的实际上是在从中获取数据后执行所需的操作firebase
.
添加示例代码供您参考。
private func fetchDataFromFirebase(){
let userDocument = userdb.collection("users").document(userDocumentId)
var userjobsData = [[String:Any]]()
userDocument.getDocument { (docums, error) in
if let docum = docums, docum.exists {
//grab all jobs data
userjobsData = docum.get("jobData") as! [[String:Any]]
//sort jobs by category in alphabetical order
userjobsData = (userjobsData as NSArray).sortedArray(using: [NSSortDescriptor(key: "category", ascending: true)]) as! [[String:AnyObject]]
self.perfomAction(firebaseResult : userjobsData)
// now pass this data to your need function like
}
}
}
private func perfomAction(firebaseResult : [[String:Any]]){
// perform your job here
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)