2016-06-27 1 views
0

Firebase Google에서 데이터를 가져옵니다. 내가받은 데이터가 만료되었는지 확인하고 있습니다.firebase 코드가 실행 된 후 Boolean을 반환하고 싶습니다.

func checkBought(movieName : String) -> Bool{ 

    var yesOrNo = false 

    boughtRef.observeEventType(.Value, withBlock: { (snap) in 

     if snap.value![movieName]! != nil { 
      if self.timestamp > snap.value![movieName]! as! Double { 
       //expire 
       print("expire") 
       yesOrNo = false 
      } else { 
       //not expire 
       print("not expire") 
       yesOrNo = true 
      } 
     } else { 
      //not bought yet 
      print("No movie") 
      yesOrNo = false 

     } 
    }) 

    return yesOrNo 
} 

이제 firebase 코드가 실행되기 전에 return 문이 반환되고 yesOrNo 값이 변경됩니다.

+0

의도 한대로 블록을 사용하고 있지 않으므로 return 문은 블록 내부에 있어야합니다. 이제 작동하는 방식은 완료 블록이 완료되기 전에 false를 반환한다는 것입니다. –

답변

1

고전 :

당신은 단순히

func checkBought(movieName : String, completion:(Bool) -> Void) { 

    boughtRef.observeEventType(.Value, withBlock: { (snap) in 

    if snap.value![movieName]! != nil { 
     if self.timestamp > snap.value![movieName]! as! Double { 
     //expire 
     print("expire") 
     completion(false) 
     } else { 
     //not expire 
     print("not expire") 
     completion(true) 
     } 
    } else { 
     //not bought yet 
     print("No movie") 
     completion(false) 

    } 
    }) 
} 

또는 쉽게

func checkBought(movieName : String, completion:(Bool) -> Void) { 
    boughtRef.observeEventType(.Value, withBlock: { (snap) in 
    if let movieStamp = snap.value![movieName] as? Double where self.timestamp <= movieStamp { 
     //not expire 
     print("not expire") 
     completion(true) 
    } else { 
     // expire or not bought yet 
     print("expire or no movie") 
     completion(false) 
    } 
    }) 
} 

당신은 완료 블록이 필요 비동기 작업을 포함하는 방법에서 아무것도 반환하지 수

A 해당 번호로 전화하십시오

checkBought("Foo") { flag in 
    print(flag) 
} 
+0

나는 단지 완성을 사용하는 법을 배운다. 고마워. –

관련 문제