如何正确使用完成处理程序
我明白完成处理程序是如何工作的,但是在语法上有点混乱。 下面是一个函数,给定一个用户名,调用一个分析查询找出相应的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) }
- swift:asynchronous任务+完成
- Swift iOS:收到远程通知后,Closure不会在后台运行
- 等待asynchronous请求结果
- 使用NotificationCenter Observer处理asynchronous请求
- findObjectsInBackgroundWithBlock:从Parse获取数据,但数据只存在于块内
- 如何解决在这个区块强烈的“捕捉”区块可能会导致一个保留周期“
- dispatch_async UIWebView的loadrequest
- 把sharedLoader函数转换成一个正常的函数
- parsing消息应用程序,需要find一种方法来延迟代码执行,直到deleteAllInBackground完成执行。 包括详细的代码