如何正确使用完成处理器
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)
}
我了解完成处理程序的工作原理,但我对语法有点困惑。下面是一个函数,它在给定用户名的情况下调用解析查询以找出相应的用户 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)
}