从嵌套函数

时间:2015-05-10 03:43:15

标签: ios swift parse-platform nested-function

我试图弄清楚如何将嵌套函数内的值返回到其父函数。我正在使用的代码是:

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语法允许您从嵌套函数内部直接向“父”函数返回值?

感谢。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您误解了完成块/闭包的异步调用是如何工作的。

您无法在函数中返回结果,因为在函数返回时,结果尚不存在。

函数findObjectsInBackgroundFromLocalDataStoreIfPossible将闭包(代码块)作为参数。它甚至在后台网络请求被发送之前立即返回,更不用说处理了。

然后你忘了后台工作并等待。后台任务完成后,它会调用你的闭包。