Большое спасибо :)

ичок в firebase и хочу узнать, есть ли какой-нибудь возможный способ вернуть данные в блоке наблюдателя. у меня урокApiManager:NSObject и в этом классе я хочу создать всю мою функцию firebase, которая будет возвращать какие-то данные из базы данных. Это одна из моих функций в этом классе

    func downloadDailyQuote() -> [String:String] {

    let reference = Database.database().reference().child("daily")

    reference.observeSingleEvent(of: .value) { (snap) in
        return snap.value as! [String:String] //I want to return this
    }


    return ["":""] //I don't want to return this
} 

И если я сейчас сделаю что-то вродеlet value = ApiManager().downloadDailyQuote(), value содержит пустой словарь. Есть какое-то решение для этого?

Ответы на вопрос(1)

Решение Вопроса

Обновить: Когда вы вызываете .observeSingleEvent, вы вызываете метод асинхронно. Это означает, что метод начнет работать, но ответ придет позже и не будет блокировать основной поток. Вы вызываете этот метод, но данных еще нет, и поэтому вы возвращаете пустой словарь.

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

func downloadDailyQuote(completion: @escaping ([String:String]) -> Void) {
   let reference = Database.database().reference().child("daily")

   reference.observeSingleEvent(of: .value) { (snap) in

      if let dictionaryWithData = snap.value as? [String:String] {
         completion(dictionaryWithData) 
      } else {
         completion(["" : ""])
      }        
    }
 }
 Jacob23328 окт. 2017 г., 14:53
Можете ли вы объяснить свой код немного?
 Jacob23328 окт. 2017 г., 15:37
Большое спасибо :)

Ваш ответ на вопрос