【发布时间】:2020-06-26 17:30:39
【问题描述】:
Firestore 包含“用户”和“帖子”的集合。 每个用户的文档都有一个“帖子”集合。 “Posts”有一个引用类型“post”,值为“posts/documentID”。
我想获取用户的帖子列表,我尝试用下面的代码实现,但是“print(self.postsData)”是空的。
我该怎么做?
class postFetcher: ObservableObject {
@Published var postsData: [PostModel] = []
private let userDefaults = UserDefaults.standard
private let uid: String
private var db: Firestore!
private let dispatchGroup = DispatchGroup()
private let dispatchQueue = DispatchQueue(label: "queue")
init() {
db = Firestore.firestore()
uid = self.userDefaults.object(forKey: "userDataUid") as! String
fetchPostsData()
}
func fetchPostsData() {
self.db.collection("users").document(uid).collection("posts").getDocuments { (snaps, err) in
guard let snaps = snaps else { return }
for document in snaps.documents {
self.dispatchGroup.enter()
self.dispatchQueue.async(group: self.dispatchGroup) { [weak self] in
self?.asyncProcess(document: document) { () -> Void in
self?.dispatchGroup.leave()
}
}
}
self.dispatchGroup.notify(queue: .main) {
print(self.postsData)
}
}
}
func asyncProcess(document: QueryDocumentSnapshot, completion: () -> Void) {
let refarence: DocumentReference = document.data()["post"] as! DocumentReference
refarence.getDocument { (snap, err) in
guard let snap = snap else { return }
self.postsData.append(PostModel(
documentId: snap.documentID,
text: snap.data()!["text"] as! String
))
}
completion()
}
}
【问题讨论】:
标签: swift google-cloud-firestore