gpt4 book ai didi

swift - Firebase 数据描述返回空数组

转载 作者:行者123 更新时间:2023-11-28 13:38:48 26 4
gpt4 key购买 nike

我正在尝试从 1 个文档中获取所有字段作为字典。但是当我尝试这样做时,我只是返回空数组。我尝试从文档中获取帮助,但没有用。

这行代码显示它不是空的

print("缓存文档数据:(dataDescription)")

var user:String = (Auth.auth().currentUser?.email)! // I used email as name of document.

var Groups = [String:Any]()

let docRef = AppDelegate.db.collection("JoinedGroups").document(user)

docRef.getDocument(source: .cache) { (document, error) in
if let document = document {
let dataDescription = document.data()
self.Groups = dataDescription! // unwrapping here
print("Cached document data: \(dataDescription)")
} else {
print("Document does not exist in cache")
}
}
// Do any additional setup after loading the view.
print(Groups)

}

这是我的结果:当我悬停在定义上时,document.data() 显示为字典

[:]//显示为空??

缓存文档数据:Optional(["test new": test new, "g3": g3, "g1": g1])

如果我能在这个问题上得到一些帮助,非常感谢。

最佳答案

这里的主要问题是 FireStore 是异步的。 Firestore 从 Internet 返回数据需要时间,并且该数据仅在 getDocument 之后的闭包内部有效。

这意味着 print(Groups) 函数将在闭包内的代码之前执行,因此它是空的。将打印品移到封口内即可。

var Groups = [String:Any]()
let docRef = AppDelegate.db.collection("JoinedGroups").document(user)
docRef.getDocument(source: .cache) { (document, error) in
if let document = document {
let dataDescription = document.data()
self.Groups = dataDescription! // unwrapping here
print("Cached document data: \(dataDescription)")
} else {
print("Document does not exist in cache")
}
print(self.Groups)
}
}

我还可以建议您坚持 var 小写的命名约定,例如组而不是组。大写通常用于类定义 UserClass 或 GroupClass。

最后一件事...文档 ID(它们的“ key ”)无法更改。这意味着如果你的结构是这样的

JoinedGroups
jimmy@email.com
name: "Jimmy"
fav_food: "Pizza"

并且您在整个应用程序中引用该用户,当他们决定更改其电子邮件提供商时,您必须遍历结构中的所有位置,读取该节点,删除该节点并用更新的电子邮件将其写回.您如何修复它是将 documentID( key )与其包含的数据分离

JoinedGroups
users_uid
name: "Jimmy"
fav_food: "Pizza"

由于 uid 永远不会改变,电子邮件可以改变 20 次而不会影响您的应用。

关于swift - Firebase 数据描述返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56296280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com