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

我明白完成处理程序是如何工作的,但是在语法上有点混乱。 下面是一个函数,给定一个用户名,调用一个分析查询找出相应的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的版本。

以下是如何实现它:

 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) }