Как работает поток управления при получении информации из Firebase? - PullRequest
0 голосов
/ 26 февраля 2019
var ergebnisBluetezeit = Set<String>()

let refBluetezeit = rootRef.child("Pflanzen").child("Eigenschaften").child("Blütezeit")
    refBluetezeit.child("Februar").observeSingleEvent(of: .value, with: { snapshot in
                    for plant in snapshot.children {
                        self.ergebnisBluetezeit.insert((plant as AnyObject).value)
                    }
                })
    print(ergebnisBluetezeit)

Я хочу получить данные из моей базы данных Firebase.Процесс извлечения уже работает, но меня смущает следующее: текущий вывод из печати является пустым набором, но когда я использую var ergebnisBluetezeit в другом месте (например, настраиваю кнопку, действие которой заключается в печати ergebnisBluetezeit), он заполняется,Когда я помещаю печать в цикл for, она выводит правильный вывод тоже.Я, кажется, не понял поток управления здесь, поэтому мой вопрос: как я могу использовать Set, где сейчас находится оператор print?Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 26 февраля 2019

Это логика асинхронных вызовов

print("1") // empty
refBluetezeit.child("Februar").observeSingleEvent(of: .value, with: { snapshot in     

 print("3") // empty
 for plant in snapshot.children {
         self.ergebnisBluetezeit.insert((plant as AnyObject).value)
  }
    print(ergebnisBluetezeit) // not empty
})

print("2") // empty

значение пусто до тех пор, пока запрос не завершится, независимо от того, где в порядке упорядочения кода вы запускаете печать, как указано выше при нумерации в порядке 1, 2, 3когда он заканчивается, вы можете использовать завершения, такие как

func getData(completion:@escaping() -> ()) {
    let refBluetezeit = rootRef.child("Pflanzen").child("Eigenschaften").child("Blütezeit")
    refBluetezeit.child("Februar").observeSingleEvent(of: .value, with: { snapshot in
        for plant in snapshot.children {
            self.ergebnisBluetezeit.insert((plant as AnyObject).value)
        }
        completion()
    })
}

и звонить

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