/* 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(“user@gm.com,comletion ..?)
答案 0 :(得分: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)!
因此单词Void
。在in
关键字之后,我们可以使用捕获的值通过可选的true或false值执行任何操作。在这里,我称之为两个函数之一。
就代码而言,这是一个非常糟糕的回调,因为虽然我们知道在回调发生时用户是否存在,但可能有几个回调排队,所以我们不知道哪个用户存在,因为用户name不会传递给闭包。
您可以在Swift文档中找到关于closures的大量内容。
答案 1 :(得分:0)
checkIsUserExists(userEmail.text!)
{
(isUser: Bool?) in
print(isUser)
}
WOW!多么奇怪的函数调用