我试图通过.map
获取用户的年龄和用户名,但它显示的是最后一个用户登录信息,而不是当前用户。
我很确定问题出在snapshot.data().map
中,但我不知道如何将其更改为当前用户。
func getData() {
let db = FirebaseManager.shared.firestore
guard let uid = FirebaseManager.shared.auth.currentUser?.uid
else {
self.errorMessage = "Could not find firebase uid"
return
}
db.collection("user").document(uid).getDocument { snapshot, error in
if error == nil {
//No errors
if let snapshot = snapshot {
DispatchQueue.main.async {
self.userInfo = snapshot.data().map { d in
return UserInfo(age: d["age"] as? Int ?? 18, username: d["username"] as? String ?? "")
}
}
}
} else {
self.errorMessage = "Uh Oh... Error"
}
}
}
在视图中,我将其显示为:Text("\(userMng.userInfo?.username ?? "NoUsername"), \(userMng.userInfo?.age ?? 18)")
1条答案
按热度按时间bxjv4tth1#
要获取当前登录用户数据,您需要一个模型。
模型示例:
然后,您将需要一个viewModel来将您的模型和视图连接在一起,这里是您将执行firebase调用的地方。
视图模型示例:
在那里,您将通过获取登录用户的uid并在firebase中搜索它来获取当前用户,然后您将检查错误,如果成功,您将为数据调用snapshotquery,当您获得数据时,您将Map出所有数据并将其设置为User。
然后可以在视图中使用该用户。
视图示例:
希望这对你有帮助。