2016-03-30 32 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); 
     } 
    } 

Kullanıcının ayrıştırma veritabanında olup olmadığını denetleyen bu işlev yöntemini buldum, ancak onu çağırmanın uygun yolu nedir anlamıyorum. checkIsUserExists ("[email protected], comletion ..?)Böyle hızlı bir işlev nasıl çağrılır?

cevap

1

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

WOW! Olduğuna bir geri arama gibi davranır aşağıdaki şekilde derdim Yani:.

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

da yerinde aşağıdaki yöntemleri vardı varsayarsak:

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

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

Önemli anahtar sözcük in'dur. Anahtar sözcükten önce, küme parantez içinde, isUser yakalanan değeri adlandırdım. Yöntemden görebildiğimiz gibi bir Boole. Ve kapatmanın bir şey döndürmesi gerekmez: (isUser: Bool?) -> Void)! dolayısıyla Void kelimesi. in anahtar kelimesinden sonra, istediğimiz doğru veya yanlış değerle istediğimiz her şeyi yapmak için yakalanan değeri kullanabiliriz. Burada iki fonksiyondan birini çağırıyorum.

Kod açısından çok zayıf bir geri çağırmadır, çünkü kullanıcının geri arama süresi içinde var olup olmadığına karar verirken sırada bekleyen çeşitli geri aramalar olabilir ve bu nedenle kullanıcı adı nedeniyle hangi kullanıcının var olduğunu bilmeyiz kapanana geçmez.

Swift belgelerinde yaklaşık closures hakkında bol miktarda bilgi bulabilirsiniz.

0

got it! doğru yolu bir kapatma gerektirir ne garip bir işlev çağrısı

+0

'Shorthand Argument Ad'ları'na göz atın - bunu şöyle diyebilirsiniz: checkIsUserExists (userEmail.text!) {Print ($ 0)} – oren

İlgili konular