gpt4 book ai didi

ios firebase 如何获取集合内的多个对象?

转载 作者:行者123 更新时间:2023-11-30 10:58:52 26 4
gpt4 key购买 nike

我在使用 firebase 时遇到问题,我有 5 个文档 ID。我需要查询这 5 个文档,将它们转换为对象。

for oneID in allIDs {

self.db.collection("storecollection").document(oneID).getDocument {(snap,err) in
let oneobject = convertToObject(snap)
self.tempHolder.append(oneobject)

var newarray = [MyObjectClass]()
if allIDs.last == oneID {
// perform copy
for x in 0...(self.tempHolder.count -1){
newarray.append(self.tempHolder[x])
}
self.tempHolder.removeAll()
completion(newarray)
}
}

上面的代码有问题,self.tempHolder 的大小总是 count = 1。(仅存在最后一个 id 获取的对象)我不知道如何纠正。

获取多个文档(具有指定ID)的正确方法是什么???

最佳答案

问题中有一些无关的代码,因此并不完全清楚,但似乎您想要迭代文档键数组,读取每个关联的文档并向数组添加属性(或者在您的情况下创建一个基于对象的对象)在这些属性上并添加它)

这是一个简单的示例,读取一系列帖子,并将每个帖子的帖子文本附加到数组中。

结构是

posts //a collection
post_0
post_text: "A post"
post_1
post_text: "Another post"
post_2
post_text: "Cool post"

以及读取 post_0 和 post_2 并将帖子文本附加到数组的代码

var postTextArray = [String]()

func readMultiplePosts() {

let postKeyArray = ["post_0", "post_2"]

for postKey in postKeyArray {
let docRef = self.db.collection("posts").document(postKey)
docRef.addSnapshotListener { documentSnapshot, error in
guard let document = documentSnapshot else {
print("err fetchibng document")
return
}

guard let data = document.data() else {
print("doc was empty")
return
}

print("doc data: \(data)")
let post = document.get("post_text") as! String
self.postMsgArray.append(post)
}
}
}

然后稍后我们想要打印帖子文本

for p in self.postMsgArray {
print(p)
}

以及控制台的输出

A post
Cool post

虽然此解决方案有效,但 Firebaser 会很快指出,通常不建议在紧密循环中读取这样的数据。最好在您想要阅读的帖子之间建立一些其他相关性,然后执行查询来读取它们。

关于ios firebase 如何获取集合内的多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53635612/

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