Чрезвычайно запутанный сферой запроса Firestore GetDocuments и входным циклом Swift - PullRequest
2 голосов
/ 16 октября 2019

Все, что я пытаюсь сделать, это проверить, существует ли значение для «ключа» в коллекции Firestore как документ, и вернуть Bool.

Но я не могу ничего вернутьв getDocument, поэтому я подумал, что мне следует сохранить var результатов и обновить var результатов, но изменения, которые я делаю в результатах, не сохраняются, и он остается ложным по умолчанию.

Как упростить весь этот беспорядок?

 func checkIfValid(db: Firestore, key: String) -> Bool {


    let resolve = db.collection("keys").document(key)

    var results = false

    resolve.getDocument{ (document, error) in

        if let document = document, document.exists {

            var results = true
        } else { results = false }
    }
    print(results)

    return results
}

1 Ответ

2 голосов
/ 17 октября 2019

Считывая документы Firebase, они имеют маленькое предупреждение под примером кода.

Примечание. Если в месте, на которое ссылается docRef, нет документа, результирующий документ будет пустым, и вызов существуетон вернет false.

Однако вам нужно добавить обработчик завершения в функцию, если вы работаете с сетевыми запросами. Swift вернет переменную result, если вы ее указали;игнорируя любой ответ от обработчика getDocuments.

Я изменил функцию, чтобы исправить ваш беспорядок.

func checkIfValid(db: Firestore, key: String, completion: @escaping(Bool) -> ()) {
let docRef = db.collection("user").document(key)

docRef.getDocument { (document, error) in
    if let document = document, document.exists {
        print("document exists.")
        completion(true)
    } else {
        print("document does not exists.")
        completion(false)
    }
}
}

И чтобы получить ответ, просто используйте это.

checkIfValid(db: db, key: "", completion: {success in
   print(success)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...