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

SwiftUI如何将从Firebase读取的数据传递到Text组件显示

实现方案

你当前的代码存在3个需要调整的点:

  • 没有声明SwiftUI响应式状态变量存储接口返回的用户名,无法触发UI刷新
  • datenLesen是异步执行的无返回值函数,不能直接传入Text组件作为参数
  • 没有定义触发数据读取的时机,函数不会自动执行

修改后的完整代码

import SwiftUI
import FirebaseDatabase
import Firebase

struct uebergeben: View {
    // 声明响应式状态变量,值变更时自动刷新UI
    @State private var userName = "加载中..."
    
    var body: some View {
        VStack {
            Text(userName)
        }
        // 页面首次显示时触发数据读取
        .onAppear {
            datenLesen()
        }
    }

    func datenLesen() {
        // 避免用户未登录时强行解包崩溃
        guard let uid = Auth.auth().currentUser?.uid else {
            userName = "用户未登录"
            return
        }

        Database.database().reference().child("benutzer").child(uid).child("nuterinfo").child("nutzername").observeSingleEvent(of: .value, with: { (snapshot) in
            if let testUser = snapshot.value as? String {
                print(testUser)
                // 给状态变量赋值,触发Text刷新
                userName = testUser
            } else {
                userName = "未获取到用户名"
            }
        })
    }
}

struct uebergeben_Previews: PreviewProvider {
    static var previews: some View {
        // 移除不存在的test参数
        uebergeben()
    }
}

核心改动说明

  1. 新增@State修饰的userName变量,作为Text的展示数据源,变量值更新时SwiftUI会自动刷新关联的UI组件
  2. 新增.onAppear修饰符,页面加载完成后自动调用数据读取方法
  3. 替换Auth用户ID的强行解包为可选绑定,避免未登录场景下的App崩溃
  4. 异步拿到Firebase返回的testUser后赋值给userName,自动更新Text展示内容

内容的提问来源于stack exchange,提问作者SebastianKl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:06:03