You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:13:10