2017-10-28 5 views
0

나는 firebase을 처음 사용하고 있으며 observer 블록에서 데이터를 반환 할 수있는 방법이 있는지 알고 싶습니다. 나는 클래스 ApiManager:NSObject을 가지고 있으며이 클래스에서 나는 데이터베이스로부터 어떤 종류의 데이터를 반환 할 firebase 함수를 모두 만들고 싶다. 이것은이 클래스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(["" : ""]) 
     }   
    } 
} 
+0

코드를 조금 설명 할 수 있습니까? –

+0

고맙습니다 :) –