Возвращается имя из Firestore? - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь вернуть имя после получения его в Firestore, но по какой-то причине оно не работает.

Вот мой код:

func getName() -> String {

        var name = ""

        db.collection("users").whereField("email", isEqualTo: user.email!).getDocuments { (snapshot, error) in

            if error != nil {

                print(error!)

            } else {

                for document in (snapshot?.documents)! {

                    name = document.data()["name"] as! String
                    // if I add `print(name) here, it works.`
                }
            }
        }
        return name
    }

Но он возвращает пустую строку: / Я хочу вернуть настоящее имя.Как мне это исправить?

1 Ответ

1 голос
/ 16 марта 2019

getDocuments - асинхронная функция.Это означает, что переменная name не ожидает завершения функции, прежде чем продолжить выполнение.Если вы хотите вернуть возвращенное имя из документа, вы можете взглянуть на следующий код:

 func getName(_ completion: (String) -> ()) {
    db.collection("users").whereField("email", isEqualTo: user.email!).getDocuments { (snapshot, error) in
        if error != nil {
            print(error!)
        } else {
            for document in (snapshot?.documents)! {
                name = document.data()["name"] as! String
                completion(name)
            }
        }
    }
}

getName { name in
    print(name)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...