【发布时间】:2021-11-30 11:47:35
【问题描述】:
我目前正在构建一个应用程序,但遇到了一些问题。我使用 Firebase 存储用户数据,然后将其显示在一些视图中,我设法创建了完成检索数据的函数,因此解决了异步问题,但是现在当我需要显示一些数据时显示 nil,因为视图的加载速度比 firebase 加载的时间早。
我从 firebase 加载数据的功能:
func getUserFromUID(completion: @escaping (UserData)->()){
ref.child("users").child(uid).observe(.value) { (snapshot) in
DispatchQueue.main.async {
guard let dictionary = snapshot.value as? [String:AnyObject] else { return}
var user = UserData()
if let email = dictionary["email"]{ user.email = email as? String }
if let name = dictionary["name"]{ user.name = name as? String }
user.firstname = (dictionary["firstname"] as! String)
user.lastname = (dictionary["lastname"] as! String)
user.type = (dictionary["type"] as! String)
user.uid = (dictionary["uid"] as! String)
user.profileImageUrl = (dictionary["profileImageUrl"] as! String)
user.id = snapshot.key
user.fcmToken2 = (dictionary["fcmToken"] as! String)
completion(user)
}
}
}
ChatsHomeView:
struct ChatsHomeView: View {
@ObservedObject var session : SessionStore
@State var user = UserData()
func getUserInfo(){
session.getUserFromUID { (fetcheduser) in
self.user = fetcheduser
print("THE USER:\(user)")
}
}
var body: some View {
VStack{
Text(user.name ?? "nil")
Button(action: {
session.signOut()
}){ Text("Logout").padding() }
}.onAppear{
getUserInfo()
}
}
}
问题是,一旦用户登录,它会在 ChatsHomeView Text(user.name ?? "nil") 字段所在的位置显示 nil。我需要重新启动应用程序才能更新并显示名称。有没有办法在 firebase 完全加载之前显示应用启动屏幕,或者还有其他方法?
【问题讨论】:
标签: ios swift firebase-realtime-database swiftui