如何调用这样的快捷功能?

时间:2016-03-30 08:52:09

标签: swift function parsing

/* 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 ..?)

2 个答案:

答案 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!多么奇怪的函数调用