Как сохранить (в переменной) данные документа Firestore, которые были прочитаны из базы данных в Xcode - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь прочитать данные из Firebase Firestore, но нет способа сохранить данные документа в переменной, потому что эти переменные будут только локальными и будут «собирать мусор»

Я попытался создать функцию, которая пытается вернуть содержимое документа, но это привело к ошибке, поскольку метод "getDocument" не разрешает возвращаемый тип.

docRef.getDocument { (document, error) in
    if let document = document, document.exists {
        let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
        var dataValues = document.data()!.values
        self.textInput = dataDescription
        //I first tried doing it without the word self, but it gave an error insisting that I add self, but adding it makes it a local variable and not the String variable defined in the class
        //textInput is a String
        print("Document data: \(document.data()!.values)")
        //This will print out everything in the document
    } else {
        print("Document does not exist")
    }
}

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

1 Ответ

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

Я предлагаю вам взглянуть на https://firebase.google.com/docs/firestore/manage-data/transactions, у Firebase есть одна из самых полных документов, это поможет вам, а точнее вы должны сделать это так:

let sfReference = db.collection("cities").document("SF")

db.runTransaction({ (transaction, errorPointer) -> Any? in
    let sfDocument: DocumentSnapshot
    do {
        try sfDocument = transaction.getDocument(sfReference)
    } catch let fetchError as NSError {
        errorPointer?.pointee = fetchError
        return nil
    }

    guard let oldPopulation = sfDocument.data()?["population"] as? Int else {
        let error = NSError(
            domain: "AppErrorDomain",
            code: -1,
            userInfo: [
                NSLocalizedDescriptionKey: "Unable to retrieve population from snapshot \(sfDocument)"
            ]
        )
        errorPointer?.pointee = error
        return nil
    }

    // Note: this could be done without a transaction
    //       by updating the population using FieldValue.increment()
    transaction.updateData(["population": oldPopulation + 1], forDocument: sfReference)
    return nil
}) { (object, error) in
    if let error = error {
        print("Transaction failed: \(error)")
    } else {
        print("Transaction successfully committed!")
    }
}

как описано в документации Firebase.

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