SwiftUI列表+ Firebase Firestore,获取数据然后再取消获取是一个错误的做法。
正确的做法是,在SwiftUI中使用Firebase Firestore获取数据时,不需要手动取消获取。Firebase Firestore是一种实时数据库解决方案,它使用实时更新来自动同步数据。当你在应用程序中使用Firestore时,它会自动监听数据的变化并实时更新UI。
以下是正确的步骤:
@ObservedObject
或@StateObject
属性包装器来实现这一点。addSnapshotListener
方法来监听数据的变化并更新UI。ForEach
循环来遍历Firestore返回的数据,并将其显示在列表中。下面是一个简单的示例代码:
import SwiftUI
import Firebase
struct ContentView: View {
@ObservedObject var dataModel = FirestoreDataModel()
var body: some View {
List(dataModel.items) { item in
Text(item.name)
}
.onAppear {
dataModel.loadData()
}
}
}
class FirestoreDataModel: ObservableObject {
@Published var items: [Item] = []
private var listener: ListenerRegistration?
func loadData() {
let db = Firestore.firestore()
listener = db.collection("items").addSnapshotListener { querySnapshot, error in
guard let documents = querySnapshot?.documents else {
print("Error fetching documents: \(error!)")
return
}
self.items = documents.map { document in
let data = document.data()
let name = data["name"] as? String ?? ""
return Item(name: name)
}
}
}
}
struct Item: Identifiable {
let id = UUID()
let name: String
}
在这个示例中,我们创建了一个名为ContentView
的视图,其中使用了FirestoreDataModel
作为数据模型。在视图的body
中,我们使用List
和ForEach
来显示从Firestore获取的数据。
在FirestoreDataModel
中,我们使用addSnapshotListener
方法来监听Firestore中items
集合的变化。当数据发生变化时,我们将更新items
数组,并通过@Published
属性包装器通知视图进行更新。
请注意,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。
关于Firebase Firestore的更多信息和使用方法,你可以参考腾讯云的云数据库产品:腾讯云云数据库 Firestore。
领取专属 10元无门槛券
手把手带您无忧上云