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,甚至在后台网络请求发送之前,更不用说处理了。

然后您忘记后台作业并等待。后台任务完成后,它会调用您的闭包。