【发布时间】:2021-10-09 06:58:15
【问题描述】:
更新 2:
让这件事发挥作用。没有我预期的那么优雅,但很有效。
最后的函数是这样的:
func fetchData(completion: @escaping ([MyModel]?) -> Void) {
self.db
.collection("data/userData")
.order(by: "modified", descending: true)
.addSnapshotListener { querySnapshot, error in
guard let documents = querySnapshot?.documents else {
print("no documents \(String(describing: error))")
completion(nil)
return
}
let result = documents.compactMap { queryDocumentSnapshot -> MyModel? in
return try? queryDocumentSnapshot.data(as: MyModel.self)
}
completion(result)
}
}
这样称呼它:
fetchData() { arr in if arr != nil {
//Attach it to vars or whatever
}}
我正在接受@workingdog 的回答。
更新 1: 编辑:在@workingdog 评论之后,我尝试使用此代码:
func fetchMyData(completion: @escaping ([MyModel]?) -> Void) {
self.db
.collection("data/userData")
.order(by: "modified", descending: true)
.addSnapshotListener { [self] querySnapshot, error in
guard let documents = querySnapshot?.documents else {
print("no documents \(String(describing: error))")
completion(nil)
return
}
let result = documents.compactMap { queryDocumentSnapshot -> MyModel? in
return try? queryDocumentSnapshot.data(as: MyModel.self)
}
completion(result)
}
}
这仍然没有为我提供解决方案,因为我试图从不同的函数调用此方法,但它使我的应用程序崩溃。而且,我只想用“var myDocuments = fetchData()”来调用它。上面的代码没有给我这个(尽管我什至不确定我要问的是什么)。
我有这个代码/查询应该从 Firestore 返回文档:
func fetchMyData() {
self.db
.collection("data/userData")
.order(by: "modified", descending: true)
.addSnapshotListener { [self] querySnapshot, error in
guard let documents = querySnapshot?.documents else {
print("no documents \(String(describing: error))")
return
}
print(documents.compactMap { (queryDocumentSnapshot) -> MyModel? in
return try? queryDocumentSnapshot.data(as: MyModel.self)
})
}
}
我希望这个函数返回结果而不是打印它们。我试图将它们推入一个高级变量(self.myDocuments),但是当项目变得更大并且许多其他函数尝试根据自己的需要运行此查询时,这并不好。
我尝试使用:
return documents.compactMap { (queryDocumentSnapshot) -> MyModel? in
return try? queryDocumentSnapshot.data(as: MyModel.self)
}
但收到此错误消息:
void 函数中出现意外的非 void 返回值
我知道“compactMap”不能返回任何东西,但我还能做些什么来获取这些文档并让“fetchMyData”返回它们?
【问题讨论】:
-
我认为是
func fetchMyData() -> [MyModel]{ -
querySnapshot?.documents 和你所谓的 MyModel 有什么关系?
-
@RajaKishan - 这给了我这个错误:“ListenerRegistration”不能转换为“[MyModel]”
-
@ElTomato 我不确定我是否理解你的问题
标签: swift google-cloud-firestore