2017-03-20 3 views
2

Ich habe eine harte Zeit mit Firebase-Werten in Rückkehrfunktionen. Dies scheint für mich ein andauerndes Problem zu sein. Ich habe ein grundlegendes Beispiel für mein Problem geschrieben. Wie gehe ich dabei vor?Swift Firebase Funktion Return

func getChartIndexValues(completion:@escaping (Double) ->()) { 

    //Firebase Initialization 
    var ref: FIRDatabaseReference! 
    ref = FIRDatabase.database().reference() 

    ref.child("general_room_index").observeSingleEvent(of: .value, with: {(snapshot) in 

     let snapDict = snapshot.value as? NSDictionary 
     var zero = snapDict?["0"] as! Double 

     completion(zero) 
     }) 

} 


    returnFunction() -> (Double) { 

     getChartIndexValues() { (zero) ->() in 

      let testValue = zero 
     } 


    return //THis is my problem 
} 

Antwort

1

Sie haben Ihr Problem angedeutet, aber nicht explizit angegeben. Das Problem besteht darin, dass Sie das Ergebnis einer asynchronen Funktion nicht als Funktionsergebnis zurückgeben können. Sie müssen einen Beendigungshandler übergeben, der ausgeführt wird, wenn die Funktion beendet ist, und dieser Code ist der Code, der Zugriff auf das Ergebnis hat.

returnFunction() -> (Double) { 

    getChartIndexValues() { (zero) ->() in 

    //Your code to process the results belongs here 
    self.someInstanceVar = zero 
    someLabel.text = "Your result is \(zero)" 
    } 

} 
//You CAN'T put your code to process results here. 
+0

Also, was Ihr Sprichwort ist, kann ich den Block umgehen, um einen Wert in einer Funktion zurückzugeben? Ich muss es einem Label zuweisen oder was auch immer ich ihm zuweisen möchte? – codechicksrock