如何正确使用完成处理程序

时间:2016-02-02 11:43:05

标签: ios swift asynchronous parse-platform completionhandler

我理解完成处理程序的工作原理,但我对语法有点困惑。下面是一个函数,给定用户名,调用解析查询以找出相应的userId。返回函数后查询结束(因此返回nil),这就是我们需要完成处理程序的原因。我该如何实现它?

func getUserIdFromUsername(username: String) -> String {
    var returnValue = String()
    let query = PFQuery(className: "_User")
    query.whereKey("username", equalTo: username)
    query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
        if let objects = objects {
            for object in objects {
                returnValue = object.objectId!
            }
        }
    }
    return returnValue

}

注意:我知道存在与此相似的例子,但它们要么不迅速,要么非常冗长。这是一个包含Parse的简短版本。

1 个答案:

答案 0 :(得分:2)

以下是如何实现它:

func getUserIdFromUsername(username: String, completionHandler: String -> Void) {

    let query = PFQuery(className: "_User")
    query.whereKey("username", equalTo: username)
    query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
        if let objects = objects {
            for object in objects {
                completionHandler(object.objectId!)
            }
        }
    }
}

以下是如何使用它:

getUserIdFromUsername("myUser") { id in
    doSomethingWithId(id)
}