0

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 

    } 
+2

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

Antwort

1

Vereinbarte mit Jay Kommentar nicht aktualisieren. Sie können nicht den Status wie das zurück, weil Firebases asynchron arbeitet ... was ich tun würde, ist ein Verschluss Parameter hinzuzufügen, die Hinrichtungen nach Abschluss wie folgt:

Klasse signUpClass: UIViewController {

// check to see if form is empty 

let ihelpController = UIViewController() 
var CurrentStatus:status! 

func signUp(var formArray: [String:String], complete:(CurrentStatus)->()){ 

    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") 

          //Send status to callback to handle 
          complete(status.success) 
         } 
        }) 
       } 
      }) 
     } 
    } 
} 
Verwandte Themen