En essayant de mettre à jour une variable à l'intérieur d'une classe, le statut "var CurrentStatus: status!" Est une énumération. J'ai une fonction firebase qui mettra à jour la variable. la variable get update à l'intérieur de la fonction firebase mais elle ne mettra pas à jour la variable en dehors de la fonction firebaseComment puis-je accéder à la variable firebase en dehors de la fonction firebase?
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
}
Eh bien, tout de suite la chauve-souris, vous ne pouvez pas utiliser Firebase comme une fonction pour retourner une valeur. Cela ne fonctionne pas comme ça. Firebase est asynchrone donc les données ne seraient disponibles qu'avec le bloc (closure) attaché à l'observer. En d'autres termes, le reste de votre code est en cours d'exécution avant que Firebase ne renvoie ses données. Deuxièmement, vous définissez correctement le statut self.Current dans le bloc, mais le retourner remplacera probablement ce qui a été défini, à nouveau parce que les données ne sont valides que dans la fermeture. – Jay