Как мне использовать значение номеров документов? - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь получить количество документов в определенной коллекции. Я получаю его через снимок, так как он дает мне правильный номер. Но когда я хочу вернуть его через мою функцию, он возвращает 0.

Затем я попытался выполнить консольную печать, и похоже, что возвращаемое значение сначала печатается (1), затем возвращается и печатает значения внутри запроса, где мой второй статус печати (2) ). Как я могу заставить его вернуть правильное (или snapshot.count значение)?

Мой счетчик объявлен в начале ViewController следующим образом:

var counter: Int = 0

Вот мой код:

func checkDayNumber() -> String {
    let ref = db.collection("Users").document(Auth.auth().currentUser!.uid).collection("startDay").getDocuments { (snapshot, error) in

        if error != nil {
            print("Error getting documents for checking number of days")
        } else {
            print(snapshot?.count)
            if let count = snapshot?.count {
                self.counter = count
                print(self.counter) (2)
          }
        }
      }
    print(counter) (1)
    return String(counter)
}

Консоль:

0
2

1 Ответ

0 голосов
/ 05 апреля 2019

Когда вы получаете данные с сервера firebase, и это asynchronous вызов, вам нужно подождать, пока вы не получите ответ от сервера.

Так что в вашем случае, когда вы вызываете checkDayNumber, метод print(counter) (1) вернется до завершения вашего вызова API, поэтому он вернет 0

теперь ваш API-вызов продолжается, и как только сервер FireBase вернет результат, ваш print(self.counter) (2) вернет 2.

Таким образом, чтобы решить эту проблему, вы можете использовать closures для этого.

Здесь это объяснено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...