(Firebase) printing incorrect du nombre d'users dans la database lors du comptage des users dans le tableau

Je récupère un instantané de tous les users de ma database Firebase. Après avoir ajouté tous mes users de mon nœud "users" de ma database à un tableau d'users, je tente d'imprimer le nombre d'users (qui devrait être de 12) et il dit qu'il est 0 à la place.

J'ai ajouté un point d'arrêt à l'accolade fermante de l'instruction if qui me montre que le nombre d'users atteint 12. Cependant, au moment où il est time d'imprimer ce nombre, il est nul. Passer à travers un tas de fois est juste beaucoup de code d'assemblage qui ne me dit rien.

J'appelle cette fonction dans la méthode viewDidLoad () et j'ai essayé d'imprimer le nombre d'users après que cette fonction soit appelée en plus de l'imprimer dans la fonction et elle est toujours 0.

func getUsers() { let ref = Database.database().reference().child("users") ref.observe(.childAdded, with: { (snapshot) in if let dictionary = snapshot.value as? [Ssortingng: AnyObject] { let user = User() user.id = snapshot.key user.setValuesForKeys(dictionary) self.users.append(user) } }, withCancel: nil) print(users.count) } 

Ici vous allez, une solution ci-dessous. Comme le dit Ahmed: il faut un certain time pour get datatables car elles sont asynchronouss.

 func getUsers(completionHandler:@escaping (Int) -> ()){ let ref = Database.database().reference().child("users") ref.observe(.childAdded, with: { (snapshot) in if let dictionary = snapshot.value as? [Ssortingng: AnyObject] { let user = User() user.id = snapshot.key user.setValuesForKeys(dictionary) self.users.append(user) completionHandler(self.users.count) } }) override func viewDidLoad() { super.viewDidLoad() getUsers(){ (count) in print(count) } } 

C'est assez simple ce qui se passe, j'ai juste ajouté un gestionnaire de complétion.

Parce qu'observer fonctionne de manière asynchronous et que vous imprimez users.count avant de mettre à jour le tableau des users …