в моем AppDelegate.swift
я добавил этот код,
здесь if user!= nil
определяет класс с именем UserService,
let authListener = Auth.auth().addStateDidChangeListener { (auth, user) in
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if user != nil {
UserService.observeUserProfile(user!.uid) { userProfile in
UserService.currentUserProfile = userProfile
}
//
let controller = storyboard.instantiateViewController(withIdentifier: "Home") as! UINavigationController
self.window?.rootViewController = controller
self.window?.makeKeyAndVisible()
} else {
UserService.currentUserProfile = nil
// menu screen
let controller = storyboard.instantiateViewController(withIdentifier: "SignIn") as! SignInViewController
self.window?.rootViewController = controller
self.window?.makeKeyAndVisible()
}
}
в UserService ()
class UserService{
static var currentUserProfile:User?
static func observeUserProfile(_ uid:String, completion: @escaping ((_ user:User?)->())) {
let userRef = Database.database().reference().child("users/profile/\(uid)")
userRef.observe(.value, with: { snapshot in
var user:User?
if let dict = snapshot.value as? [String:Any],
let username = dict["username"] as? String,
let profileImage = dict["profileImage"] as? String,
let url = URL(string:profileImage) {
user = User(uid: snapshot.key, username: username, profileImage: url)
}
completion(user)
})
}
}
В моем profileViewController.swift мне нужно получить текущий идентификатор пользователя,
Но всегда возвращайте ноль. Почему это так?
guard let userProfile = UserService.currentUserProfile else { return
}
Но я добавил вот так, я могу получить UID. Почему я не могу получить UID, используя UserService
let userid: String = (Auth.auth().currentUser?.uid)!
print(userid)
Ouput это:
HwXwld5YoDO0YWm6EDvtTRgl7gG3