如何正确使用完成处理器

How to use completion handler correctly

我了解完成处理程序的工作原理,但我对语法有点困惑。下面是一个函数,它在给定用户名的情况下调用解析查询以找出相应的用户 ID。查询在函数返回后结束(因此它 returns 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

}

注意:我知道存在与此类似的示例,但它们要么不是 swift,要么非常冗长。这是一个包含 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)
}