Ich versuche, eine Variable innerhalb einer Klasse zu aktualisieren "Var CurrentStatus: Status!" Status ist eine Aufzählung. Ich habe eine Firebase-Funktion, die die Variable aktualisiert. die Variable Update innerhalb der Feuerbasis Funktion bekommen, aber es wird die Variable außerhalb der Feuerbasis FunktionWie kann ich auf Firebase-Variable außerhalb Firebase-Funktion zugreifen
class signUpClass:UIViewController {
// check to see if form is empty
let ihelpController = UIViewController()
var CurrentStatus:status!
func signUp(var formArray: [String:String]) -> status{
var formStatus:status = ihelpController.checkIfFormIsEmpty(formArray)
if (formStatus == status.success){
//form is ok to process
// check DOB
//TODO: create date calculation function
let DateOfBirth:Int = 18
if DateOfBirth < 18 {
//user is not 18 they can not register
alertError("oops", message: "You must be 18 to register", comfirm: "Ok")
} else {
//Proceed with registration
let firebaseController = Firebase()
var email = "[email protected]"
var password = "1234"
firebaseController.refPath("users").createUser(email, password: password, withValueCompletionBlock: {error, result in
if error != nil {
print("registration Error")
self.alertError("oops", message: "That email is registered already", comfirm: "OK")
} else {
let vc =
print("user can register")
firebaseController.firebaseRefUrl().authUser(email, password: password, withCompletionBlock:{
error, authdata in
if error != nil {
print("login Error")
}else{
let userId = firebaseController.firebaseRefUrl().authData.uid
formArray["userId"] = userId
firebaseController.refPath("users/\(userId)").updateChildValues(formArray)
print("user is register and can proceed to dashBoard")
//Proceed to dashboard
self.CurrentStatus = status.success
}
})
}
})
}
}
return CurrentStatus
}
Nun, nach rechts weg der Fledermaus, Sie können Firebase nicht als Funktion verwenden, um einen Wert zurückzugeben. Es funktioniert nicht so. Firebase ist asynchron, so dass die Daten nur mit dem Block (Closure) zur Verfügung stehen, der an die Beobachtung angehängt ist. Mit anderen Worten: Der Rest des Codes wird ausgeführt, bevor Firebase die Daten zurückgegeben hat. Zweitens setzen Sie den Status "self.Current" innerhalb des Blocks korrekt, aber die Rückgabe wird wahrscheinlich überschreiben, weil die Daten nur innerhalb des Abschlusses gültig sind. – Jay