Как я могу быстро подсчитать документы из запроса хранилища? - PullRequest
0 голосов
/ 28 мая 2020

Ответ, должно быть, смотрит на меня, но я его не вижу. Я пытаюсь запросить firestore и получить количество идентифицируемых документов, чтобы я мог передать это в свою функцию TableView (количество строк). Каким-то образом счетчик работает внутри for l oop, и я ожидал, что переменная будет содержать это увеличенное значение, но оно возвращается к нулю, когда я передаю его обратно. Это проблема объема? Что мне не хватает? вот мой код:

func runQueryForNumberOfGames() -> Int {
    var counter = 0
    // query the games for the user who is logged into app
    let currentUid = Auth.auth().currentUser!.uid

    db.collection("games").whereField("userTrackingGame", isEqualTo: currentUid).getDocuments { (querySnapshot, err) in
               if let err = err {
                print("error getting documents: \(err)")
                return
               }
               else {

                    for document
                        in querySnapshot!.documents {
                        print(document)
                        counter += 1
                        print("the counter is: \(counter)")
                    }
                }

    }
    print("the counter outside of the for loop is \(counter)")
    return (counter)
}

1 Ответ

1 голос
/ 28 мая 2020

Это асинхронная c функция, поэтому вам нужно вернуть обработчик завершения

func runQueryForNumberOfGames(completion: @escaping (Int?)-> Void) {
    var counter = 0
    // query the games for the user who is logged into app
    let currentUid = Auth.auth().currentUser!.uid

    db.collection("games").whereField("userTrackingGame", isEqualTo: currentUid).getDocuments { (querySnapshot, err) in
               if let err = err {
                print("error getting documents: \(err)")
                completion(nil)
                return
               }
               else {

                    for document
                        in querySnapshot!.documents {
                        print(document)
                        counter += 1
                        print("the counter is: \(counter)")
                    }

                completion(counter)
                }

    }

}

Как использовать

runQueryForNumberOfGames {[weak self] (counter) in
    if let count = counter  {
        print(count)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...