SwiftUI中View加载时自动调用Firestore数据获取函数的方法
SwiftUI中View加载时自动调用Firestore数据获取方法
你可以通过两种常用方式实现View加载时自动调用fetchWeight():
1. 使用onAppear修饰符
这是SwiftUI中最常用的触发View加载逻辑的方式,当View首次出现在屏幕上时执行代码:
修改你的ChildView代码,给根视图添加onAppear:
struct ChildView: View { @EnvironmentObject var firestoreManager: FirestoreManager var body: some View { VStack { // 可保留按钮用于手动刷新(可选) Button { firestoreManager.fetchWeight() } label: { Text("Fetch Data") } Text("Number: \(firestoreManager.Dowkg)") } .onAppear { firestoreManager.fetchWeight() } } }
2. 使用task修饰符(iOS 15+ / macOS 12+ 及以上)
如果fetchWeight()是异步函数(比如内部用了async/await),推荐使用task修饰符,它会在View出现时启动异步任务,并且在View销毁时自动取消任务,避免内存泄漏:
struct ChildView: View { @EnvironmentObject var firestoreManager: FirestoreManager var body: some View { VStack { Button { firestoreManager.fetchWeight() } label: { Text("Fetch Data") } Text("Number: \(firestoreManager.Dowkg)") } .task { await firestoreManager.fetchWeight() // 假设fetchWeight是async函数 } } }
注意事项
确保你的FirestoreManager中,Dowkg变量是用@Published修饰的,这样当数据获取完成后,UI才能自动刷新:
class FirestoreManager: ObservableObject { @Published var Dowkg: String = "" // 或对应的数据类型 func fetchWeight() { // 你的Firebase数据获取逻辑,获取后更新Dowkg } // 如果是异步版本: func fetchWeight() async { // 异步获取数据并更新Dowkg } }
内容的提问来源于stack exchange,提问作者alancord
相关产品推荐
相关产品推荐

