Как получить доступ к числовому полю в Cloud Firestore - PullRequest
1 голос
/ 09 июля 2020

У меня есть следующий код:

 @IBOutlet weak var totalPointsSideMenu: UILabel!
 db.collection("users").whereField("uid", isEqualTo: uid!)
            .getDocuments() { (querySnapshot, err) in
                if let err = err {
                    print("Error getting documents: \(err)")
                } else {
                    for document in querySnapshot!.documents {
                        let totalPoints2 = document.get("totalPoints")
                        self.totalPointsSideMenu?.text = totalPoints2 as? String
                    }
                }
        }

и вот как выглядит мое облако Firestore: введите описание изображения здесь Я не получаю сообщения об ошибке или что-то в этом роде, просто метка отображается пустой. Что я делаю не так?

1 Ответ

1 голос
/ 09 июля 2020

TR; DR - вот как вы читаете Int из Firestore.

let age = doc.get("age") as? Int ?? 0

Более длинный ответ: я бы предложил изменение.

Непонятно, почему вы запрашиваете узел пользователей по uid. Другими словами, использование uid пользователя в качестве идентификатора документа

users
   uid_0
      totalPoint: 0
      username: "cbaden"

значительно упростит задачу.

let userDoc = collectionRef.document("uid_0")
userDoc.getDocument(completion: { document, error in
    if let err = error {
        print(err.localizedDescription)
        return
    }

    guard let doc = document else { return }

    let age = doc.get("age") as? Int ?? 0
    print(age)
})

Также обратите внимание, что я использую объединение nil оператор для защиты моего кода. В случае, если у документа нет свойства 'age', это вызовет sh

document?.get("age")

, тогда как этому

document?.get("age") as? Int ?? 0

присвоено значение 0 в case 'age' отсутствует.

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