【发布时间】:2023-01-25 03:56:19
【问题描述】:
我正在尝试使用 @FirestoreQuery 通过 SwiftUI 应用程序获取 Firestore 文档。但是,由于某种原因,它根本不起作用。在 onAppear 中使用 SnapshotListener 和 FetchData 时,同样的功能起作用,因此它与 Firebase 规则等无关。包依赖性取决于下一个主要。请尝试重现此问题,因为 Firebase 中似乎存在某些问题以防止出现这种情况。也可能该服务是作为 Beta 提供的,但最好有一个解释。在我这边,我附上了我拥有的所有代码,这是非常基本的。
非工作的(使用@FirestoreQuery)
import SwiftUI
import Firebase
import FirebaseAuth
import FirebaseFirestore
import FirebaseFirestoreSwift
struct ContentView: View {
@FirestoreQuery(collectionPath: "todos") var todos: [Todo]
var body: some View {
List(self.todos) { todo in
Text(todo.title)
.foregroundColor(Color.white)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct Todo : Identifiable, Decodable {
var id = UUID()
var title: String
var done: Bool
}
工作一个(SnapshotListener)
import SwiftUI
import Firebase
import FirebaseAuth
import FirebaseFirestore
import FirebaseFirestoreSwift
struct ContentView: View {
@ObservedObject var todos = getTodosData()
var body: some View {
List(self.todos.datas) { todo in
Text(todo.title)
.foregroundColor(Color.white)
}
.onAppear{
self.todos.retrieveData()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct Todo : Identifiable, Decodable {
var id = UUID()
var title: String
var done: Bool
}
class getTodosData : ObservableObject{
@Published var datas = [Todo]()
private var db = Firestore.firestore()
func retrieveData(){
db.collection("todos").addSnapshotListener{ (querySnapshot, error) in
guard let mov = querySnapshot?.documents else{
print("No todo")
return
}
self.datas = mov.map{(queryDocumentSnapshot) -> Todo in
let data = queryDocumentSnapshot.data()
let id = UUID()
let title = data["title"] as? String ?? ""
let done = data["done"] as? Bool ?? false
return Todo(id: id, title: title, done: done)
}
}
}
}
【问题讨论】:
标签: firebase google-cloud-firestore swiftui