Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Firebase datadescription返回空数组_Swift_Firebase_Google Cloud Firestore - Fatal编程技术网

Swift Firebase datadescription返回空数组

Swift Firebase datadescription返回空数组,swift,firebase,google-cloud-firestore,Swift,Firebase,Google Cloud Firestore,我试图从1个文档中获取所有字段作为字典。但当我尝试这样做时,我得到的只是一个空数组。我试图从文档中获得帮助,但它不起作用 这行代码显示它不是空的 打印(“缓存的文档数据:(dataDescription)”) 以下是我的结果: 当我浏览定义时,document.data()显示为字典 [:]//显示为空 缓存的文档数据:可选([“测试新”:测试新,“g3”:g3,“g1”:g1]) 如果我能在这个问题上得到一些帮助,非常感谢。这里的主要问题是FireStore是异步的。Firestore从int

我试图从1个文档中获取所有字段作为字典。但当我尝试这样做时,我得到的只是一个空数组。我试图从文档中获得帮助,但它不起作用

这行代码显示它不是空的

打印(“缓存的文档数据:(dataDescription)”)

以下是我的结果: 当我浏览定义时,document.data()显示为字典

[:]//显示为空

缓存的文档数据:可选([“测试新”:测试新,“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)
    } 
}
我还建议您坚持使用变量为小写的命名约定,例如组而不是组。大写通常用于类定义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"