作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想读取一个文档,从该文档中获取一个字段,并将一个变量设置为该字段的值
我希望在 Firebase getDocument 函数之外声明的变量被写入。实际结果是变量被写入 Firebase getDocument 函数内,但在函数外它是空的。
这是我尝试过的:
[1]: Modifying variable within firebase function - 这对我不起作用,因为我无法用我目前的 Swift 技能很好地翻译它
[2]: 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
获取数据是 异步任务
并且需要一些时间来获取数据,与此同时你正在阅读你的 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
}
关于swift - 如何从 Firebase getDocument 函数中写入变量 (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59796930/
我是一名优秀的程序员,十分优秀!