Return 来自嵌套函数
Return from nested function
我想弄清楚如何 return 从嵌套函数内部到其父函数的值。我正在使用的代码是:
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()
}
}
我需要return函数内部的响应,因为它只能在查询完成后return,但是如果我尝试这样做,编译器会抱怨我不能这样做因为嵌套函数的 return 类型是 Void
。是否有 Swift 语法允许您从嵌套函数内部直接将值 return 赋给 "parent" 函数?
谢谢。非常感谢任何帮助。
您误解了异步调用完成 blocks/closures 的工作方式。
您不能在您的函数中 return 结果,因为在函数 return 时,结果还不存在。
函数 findObjectsInBackgroundFromLocalDataStoreIfPossible 将一个闭包(一段代码)作为参数。它立即 return,甚至在后台网络请求发送之前,更不用说处理了。
然后您忘记后台作业并等待。后台任务完成后,它会调用您的闭包。
我想弄清楚如何 return 从嵌套函数内部到其父函数的值。我正在使用的代码是:
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()
}
}
我需要return函数内部的响应,因为它只能在查询完成后return,但是如果我尝试这样做,编译器会抱怨我不能这样做因为嵌套函数的 return 类型是 Void
。是否有 Swift 语法允许您从嵌套函数内部直接将值 return 赋给 "parent" 函数?
谢谢。非常感谢任何帮助。
您误解了异步调用完成 blocks/closures 的工作方式。
您不能在您的函数中 return 结果,因为在函数 return 时,结果还不存在。
函数 findObjectsInBackgroundFromLocalDataStoreIfPossible 将一个闭包(一段代码)作为参数。它立即 return,甚至在后台网络请求发送之前,更不用说处理了。
然后您忘记后台作业并等待。后台任务完成后,它会调用您的闭包。