tl; dr: Pour déboguer votre code asynchrone dans XCode, placez un point d'arrêt sur la première instruction dans le gestionnaire d'achèvement.
explication plus longue:
Lorsque vous observez une valeur de Firebase, il peut prendre une quantité de temps pour obtenir ces données. Pour éviter que votre programme ne soit bloqué pendant ce temps, les données sont chargées depuis la base de données Firebase en arrière-plan pendant que votre code continue. Ensuite, lorsque les données deviennent disponibles, Firebase appelle votre gestionnaire d'achèvement.
Ce modèle est connu sous le nom de chargement asynchrone et est commun à pratiquement toutes les API Web modernes. Mais il peut être incroyablement difficile de s'y habituer.
Une façon facile de voir ce qui se passe est d'exécuter le code avec quelques déclarations de journalisation bien lieu:
ref = Database.database().reference()
print("Before attaching observer")
ref.child("Contas").child("Assets").observeSingleEvent(of: .value) { (snapshot) in
print("Inside completion handler")
}
print("After attaching observer")
Ce code immédiatement imprimé:
Avant de fixer observateur
Après avoir attiré l'observateur
Et puis après quelques instants (en fonction de la vitesse du réseau et d'autres facteurs):
intérieur gestionnaire d'achèvement
Bien qu'il existe des façons de rendre le code après le bloc d'attente pour les données (voir la liens ci-dessous pour plus sur cela), la façon la plus courante de traiter le chargement asynchrone est de recadrer la question. Au lieu d'essayer de coder "d'abord obtenir les données, puis imprimez-le", encadrer votre problème comme "nous commençons à obtenir les données, chaque fois que nous obtenons les données, nous l'imprimons".
La façon de modéliser ceci en code est que vous déplacez tout le code qui a besoin d'accéder aux données de Firebase dans le gestionnaire de complétion de votre observateur. Votre code le fait déjà en ayant print (numero as Any)
dedans.
Pour déboguer votre code asynchrone dans XCode, placez un point d'arrêt sur le code dans le gestionnaire d'achèvement. Ce point d'arrêt sera alors atteint lorsque les données reviendront de Firebase.
Quelques questions qui traitent aussi avec ce comportement:
Grande ... Il travaillé!!! merci beaucoup pour l'explication complète –