Как записать в переменную из функции FireDBase getDocument (Swift) - PullRequest
2 голосов
/ 18 января 2020

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

Я ожидал, что моя переменная, объявленная вне функции getDocument Firebase, будет записана. Фактические результаты таковы: переменная записывается в функцию FireDBase getDocument, но вне функции она пуста.

Вот что я пробовал:

[1]: Изменение переменная в функции Firebase - это не сработало для меня, потому что я не могу хорошо ее перевести с моими текущими навыками Swift

[2]: Как установить переменные из снимка Firebase ( swift) - это не сработало для меня, потому что реализация сильно отличается от того, что у меня сейчас


//open the user Firebase database by documentID
     let userDocument = userdb.collection("users").document(userDocumentId)

     var userjobsData = [[String:Any]]()

     userDocument.getDocument { (docums, error)  in

         if let docum = docums, docum.exists {

         //grab all jobs data
         userjobsData = docum.get("jobData") as! [[String:Any]]

         //sort jobs by category in alphabetical order
         userjobsData = (userjobsData as NSArray).sortedArray(using: [NSSortDescriptor(key: "category", ascending: true)]) as! [[String:AnyObject]]

         }
        //Here userjobsData contains data
        print(userjobsData)
     }
     //Here userjobsData is empty
     print(userjobsData)

1 Ответ

1 голос
/ 18 января 2020

На самом деле, что происходит в вашем случае Firebase выборка данных равна asynchronous task и занимает некоторое время для извлечения данных, в то время как вы читаете свой userjobsData, который пуст, поскольку запрос Firebase не был выполнен.

Что вы можете сделать, так это выполнить необходимую операцию после извлечения данных из firebase.

Добавление образца кода для вашей справки.

private func fetchDataFromFirebase(){

  let userDocument = userdb.collection("users").document(userDocumentId)

     var userjobsData = [[String:Any]]()

     userDocument.getDocument { (docums, error)  in

         if let docum = docums, docum.exists {

         //grab all jobs data
         userjobsData = docum.get("jobData") as! [[String:Any]]

         //sort jobs by category in alphabetical order
         userjobsData = (userjobsData as NSArray).sortedArray(using: [NSSortDescriptor(key: "category", ascending: true)]) as! [[String:AnyObject]]

          self.perfomAction(firebaseResult : userjobsData)
          // now pass this data to your need function like
         }

  }
}

private func perfomAction(firebaseResult : [[String:Any]]){
  // perform your job here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...