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

ユーザーが解析データベースに存在するかどうかを確認するこの関数メソッドが見つかりましたが、それを呼び出す適切な方法は何ですか? checkIsUserExists(「[email protected]、comletion ..?)このような迅速な機能を呼び出す方法は?

答えて

1

であることはその閉鎖を要求しますコールバックとして機能しますが、以下の方法でそれを呼び出すと思いますので:。

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

あなたも代わりに以下のメソッドを持っていたと仮定すると:

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

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

重要なキーワードはinです。キーワードの前に、中括弧の中に、捕捉されている値にisUserという名前を付けました。このメソッドからわかるように、Boolです。クロージャーは何も返す必要はありません:(isUser: Bool?) -> Void)!したがって、単語Voidinキーワードの後に​​キャプチャされた値を使用して、任意の真または偽の値で希望するものを実行できます。ここで私は2つの関数のうちの1つを呼び出します。

コードに関しては、コールバックが発生するまでにユーザーが存在するかどうかがわかっていますが、複数のコールバックが並んでいるため、どのユーザーが存在するのかわからないため、ユーザー名クロージャーには渡されません。

Swiftのマニュアルでは、closuresについて詳しく知ることができます。

0

はそれを得た! 正しい方法は

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

WOW!何奇妙な関数呼び出し

+0

「略式引数名」をチェックしてください。checkIsUserExists(userEmail.text!){print($ 0)} – oren

関連する問題