我试图弄清楚如何将嵌套函数内的值返回到其父函数。我正在使用的代码是:
func findObjectsInBackgroundFromLocalDataStoreIfPossible (query: PFQuery, toCallUponCompletion: () -> ()) -> [PFObject]{
var response = [PFObject]()
let queryCopy = query.copy() as! PFQuery
queryCopy.fromLocalDatastore()
queryCopy.findObjectsInBackgroundWithBlock{
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil{
if objects?.count == 0{
query.findObjectsInBackgroundWithBlock{
(objects2: [AnyObject]?, error: NSError?) -> Void in
if error == nil{
response = objects2 as! [PFObject]
}
}
}
else{
response = objects as! [PFObject]
}
}
toCallUponCompletion()
}
}
我需要从函数内部返回响应,因为它只能在查询完成后返回,但是如果我尝试这样做,编译器会抱怨我不能这样做,因为嵌套函数的返回类型是{ {1}}。是否有Swift语法允许您从嵌套函数内部直接向“父”函数返回值?
感谢。非常感谢任何帮助。
答案 0 :(得分:1)
您误解了完成块/闭包的异步调用是如何工作的。
您无法在函数中返回结果,因为在函数返回时,结果尚不存在。
函数findObjectsInBackgroundFromLocalDataStoreIfPossible将闭包(代码块)作为参数。它甚至在后台网络请求被发送之前立即返回,更不用说处理了。
然后你忘了后台工作并等待。后台任务完成后,它会调用你的闭包。