Swift Firebase datadescription返回空数组
我试图从1个文档中获取所有字段作为字典。但当我尝试这样做时,我得到的只是一个空数组。我试图从文档中获得帮助,但它不起作用 这行代码显示它不是空的 打印(“缓存的文档数据:(dataDescription)”) 以下是我的结果: 当我浏览定义时,document.data()显示为字典 [:]//显示为空 缓存的文档数据:可选([“测试新”:测试新,“g3”:g3,“g1”:g1])Swift Firebase datadescription返回空数组,swift,firebase,google-cloud-firestore,Swift,Firebase,Google Cloud Firestore,我试图从1个文档中获取所有字段作为字典。但当我尝试这样做时,我得到的只是一个空数组。我试图从文档中获得帮助,但它不起作用 这行代码显示它不是空的 打印(“缓存的文档数据:(dataDescription)”) 以下是我的结果: 当我浏览定义时,document.data()显示为字典 [:]//显示为空 缓存的文档数据:可选([“测试新”:测试新,“g3”:g3,“g1”:g1]) 如果我能在这个问题上得到一些帮助,非常感谢。这里的主要问题是FireStore是异步的。Firestore从int
如果我能在这个问题上得到一些帮助,非常感谢。这里的主要问题是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)
}
}
我还建议您坚持使用变量为小写的命名约定,例如组而不是组。大写通常用于类定义UserClass或GroupClass
最后一件事。。。无法更改文档ID(其“键”)。这意味着如果你的结构是这样的
JoinedGroups
jimmy@email.com
name: "Jimmy"
fav_food: "Pizza"
你在整个应用程序中引用该用户,当他们决定更改其电子邮件提供商时,你必须遍历结构中的所有位置,读入该节点,删除该节点,然后将其与更新的电子邮件一起写回。如何修复它是因为它将documentID(键)与其包含的数据解除关联
JoinedGroups
users_uid
name: "Jimmy"
fav_food: "Pizza"
由于uid从未更改,电子邮件可以更改20次,并且不会影响您的应用程序。FYI您可以使用编辑链接编辑您的问题,而不是在评论中添加新信息。非常感谢。我感谢你的帮助。我会考虑你提到的。@Kenny如果我的回答有帮助,一定要接受,这样才能帮助别人。看,我有一个问题,数据是否只在getDocument的闭包内有效。我怎样才能把数据拿出来?我想要字段中的值。还有其他方法吗。@Kenny有很多选择,但关键是让闭包控制应用程序的流程。换句话说,不要试图在闭包之外填充tableView数据源,而是在数据有效时在闭包内填充它。不管怎样,tableView数据源通常是一个类变量,所以该模型运行良好。这里有很多关于Firestore流程的例子——也许你可以找到一个与你的用例相匹配的,如果没有,请问另一个问题,我们来看看!
JoinedGroups
users_uid
name: "Jimmy"
fav_food: "Pizza"