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() } }
核心改动说明
- 新增
@State修饰的userName变量,作为Text的展示数据源,变量值更新时SwiftUI会自动刷新关联的UI组件 - 新增
.onAppear修饰符,页面加载完成后自动调用数据读取方法 - 替换Auth用户ID的强行解包为可选绑定,避免未登录场景下的App崩溃
- 异步拿到Firebase返回的
testUser后赋值给userName,自动更新Text展示内容
内容的提问来源于stack exchange,提问作者SebastianKl
相关产品推荐
相关产品推荐

