2016-03-30 8 views
0
/* Checks Is Username Already Exists 
     Take - username 
     Return - Bool (True/False) */ 

    func checkIsUserExists(username: String, completion: ((isUser: Bool?) -> Void)!) { 

     var isPresent: Bool = false; 

     let query: PFQuery = PFQuery(className: "your_class_name") 
     query.whereKey("your_key", equalTo:username) 

     query.findObjectsInBackgroundWithBlock { 
      (objects: [AnyObject]?, error: NSError?) -> Void in 

      if error == nil { 
       if (objects!.count > 0) { 
        isPresent = true; 
       } 

      } else { 
       // Log details of the failure 
       println("Error: \(error) \(error!.userInfo!)") 
      } 

      completion(isUser: isPresent); 
     } 
    } 

Ich fand diese Funktionsmethode, die überprüft, ob der Benutzer in Pars-Datenbank existiert, aber ich bekomme es nicht, was ist der richtige Weg, um es aufzurufen? checkIsUserExists ("[email protected], comletion ..?)Wie man eine solche schnelle Funktion nennt?

Antwort

1

Es hat eine Schließung erfordert, dass fungiert als Rückruf, damit Sie es auf folgende Weise nennen würde.

checkIsUserExists("User Name"){isUser in if let user = isUser where user { 
    userFound() 
    } 
else { 
    userNotFound() 
    } 
} 

Angenommen, Sie auch folgende Methoden an Ort und Stelle hatte:

func userFound() { 
// do something if the user was found 
} 

func userNotFound() { 
// do something if the user was not found 
} 

Das wichtige Schlüsselwort ist in. Vor dem Schlüsselwort in den geschweiften Klammern habe ich den Wert genannt, der erfasst wird isUser. Es ist ein Bool, wie wir von der Methode sehen können. Und die Schließung ist nicht erforderlich, um etwas zurückzugeben: (isUser: Bool?) -> Void)! daher das Wort Void. Nach dem Schlüsselwort in können wir den erfassten Wert verwenden, um mit dem optionalen True- oder False-Wert zu tun, was wir wollen. Hier rufe ich eine von zwei Funktionen auf.

In Bezug auf Code ist es ein sehr schlechter Callback, da wir wissen, ob der Benutzer bis zum Zeitpunkt des Rückrufs existiert, gibt es mehrere Callbacks in der Schlange und so werden wir nicht wissen, welcher Benutzer als Benutzername existiert wird nicht an die Schließung weitergegeben.

Sie können viel über closures in der Swift-Dokumentation herausfinden.

0

hat es! Der richtige Weg

checkIsUserExists(userEmail.text!) 
     { 
      (isUser: Bool?) in 
      print(isUser) 
     } 

WOW ist! Was für einen sonderbaren Funktionsaufruf

+0

Auschecken 'Shorthand Argument Names' - Sie können es so nennen: checkIsUserExists (userEmail.text!) {Print ($ 0)} – oren

Verwandte Themen