Как получить значения из documentSnapshot - PullRequest
0 голосов
/ 08 марта 2019

Я использую Firestore и у меня есть коллекция с полем. Поле имеет несколько строковых значений:

Поле: имена

  • 0: «Имя 1»
  • 1: «Имя 2»
  • 2: «Имя 3»

С

let documentData = documentSnapshot.data()

Я получаю словарь с 1 ключом (именами) и 3 значениями.

Каков наилучший способ получить массив String со значениями? (возможно с Codable)

Я пробовал с

if let data = try? JSONSerialization.data(withJSONObject: documentData as Any, options: []) {
   let users = try? JSONDecoder().decode(??.self, from: data)                
}

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Я решил это сейчас таким образом. Вероятно, существует что-то лучшее.

    let db = Firestore.firestore()
    let userReference = db.collection("users").document(user.uid)

    userReference.getDocument { (documentSnapshot, error) in
        if let error = error {

        } else if let documentSnapshot = documentSnapshot, documentSnapshot.exists {
            if let documentData = documentSnapshot.data() {

                let data = documentData.compactMap({ (arg) -> [String]? in
                    let (_, value) = arg
                    var array = [String]()

                    if let values = value as? [String] {
                        for item in values {
                            array.append(item)
                        }
                    }

                    return array
                })

                let users = data.flatMap({ (value) -> [String] in
                    return value
                })

                print(users)
            }

        } else {

        }
    }
0 голосов
/ 08 марта 2019

Я не уверен, что мой путь самый лучший, но давайте попробуем.

Я бы сделал что-то вроде этого:

//Choosing collection
            db.collection("YOUR_COLLECTION").getDocuments()
                    { (QuerySnapshot, err) in
                        if err != nil
                        {
                            print("Error getting documents: \(String(describing: err))");
                        }
                        else
                        {
                            //For-loop
                            for document in QuerySnapshot!.documents
                            {
                                //let document = QuerySnapshot!.documents
                                let data = document.data()

                                let data1 = data["YOUR_DATA1"] as? String
                                let data2 = data["YOUR_DATA2"] as? String

                                //Now you can access your data1 and data2 like this:
                                //example code:
                                txtfield_data1.text = data1
                                txtfield_data2.text = data2
                            }

И там вы можете отформатировать его так, как хотите. Я надеюсь, что это то, что вы имеете в виду, в противном случае, дайте мне знать, и я постараюсь отредактировать это как можно лучше. :) Хорошего дня!

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