2016-06-27 15 views
0

Ich erhalte Daten von Firebase Google. Ich überprüfe, ob die Daten, die ich erhalten habe, ablaufen oder nicht.Ich möchte Boolean zurückgeben, nachdem der Firebase-Code ausgeführt wurde

Jetzt gibt die Rückgabeanweisung zurück, bevor der Firebase-Code ausgeführt wird, und ändert den Wert von yesOrNo.

+0

Sie verwenden nicht die Blöcke, wie beabsichtigt, sollte die Return-Anweisung INSIDE Ihr Block sein. Wie es jetzt funktioniert ist, dass es false zurückgibt, bevor der Abschlussblock fertig ist. –

Antwort

1

Der Klassiker:

Sie können nicht alles von einer Methode zurückgeben, die eine asynchrone Aufgabe

Sie benötigen, einfach

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) 

    } 
    }) 
} 

Oder einfacher

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) 
    } 
    }) 
} 
einen Fertigstellungsblock enthält

A Nennen Sie es mit

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

Ich lerne nur, wie man die Vervollständigung benutzt. Danke vielmals –

Verwandte Themen