当我登录和退出正在构建的应用程序时,我在自动更新UILabels时遇到问题。就像如果我关闭并重新打开RearViewRevealController (MenuVC)
,我可以让他们更新.但是有没有办法自动更新它们,而无需在用户每次登录/注销时重新打开菜单?
菜单VC
override func viewDidAppear(_ animated: Bool) {
if let user = Auth.auth().currentUser , !user.isAnonymous {
// We are logged in
logInOutBtn.setTitle("Logout", for: .normal)
if UserService.userListener == nil {
UserService.getCurrentUser {
self.fullNameTxt.text = UserService.user.fullName
self.emailTxt.text = UserService.user.email
}
}
} else {
logInOutBtn.setTitle("Login", for: .normal)
fullNameTxt.text = "Sign in or create an account"
emailTxt.text = "to continue"
}
}
用户服务
func getCurrentUser(completion: @escaping () -> ()) {
guard let authUser = auth.currentUser else { return }
let userRef = db.collection("users").document(authUser.uid)
userListener = userRef.addSnapshotListener({ (snap, error) in
if let error = error {
debugPrint(error.localizedDescription)
return
}
guard let data = snap?.data() else { return }
self.user = User.init(data: data)
completion()
})
}
可以使用UserDefault更新标签。
label.text = UserDefaults.standard.value(forKey: UserDefaultKey.name)
然后,例如,可以在登录时将用户名保存到UserDefault。
UserDefaults.standard.set(username, forKey: UserDefaultKey.name)
注销时,将其值设置为 "。