在函数完全执行之前返回值

Returning the value before the function executed fully

我有一个功能如下图

func getRecipeArray(name:String) -> [String] {
    var query = PFQuery(className: name)
    query.selectKeys(["Recipe_Name"])
    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]!, error: NSError!) -> Void in
        if error == nil {

            NSLog("Successfully retrieved \(objects.count) scores.")
            for object in objects {
                var name: String = object.objectForKey("Recipe_Name")! as String
                self.dummyArray.append(name)

                }

        } else {

                NSLog("Error: %@ %@", error, error.userInfo!)

            }
    }

    println(self.dummyArray.count)
    println(self.dummyArray)
    return self.dummyArray
}

从解析中检索 Recipe_name 后应该 return 数组。 但它 return 之前只是一个值,然后执行 findObjectsInBackgroundWithBlock 函数。

在控制台中它打印如下所示的值

1 [] 2015-01-08 16:15:27.922 IndianFood[2268:67055] 成功检索到 2 个分数。

请帮我解决这个问题。

query.findObjectsInBackgroundWithBlock是一个在后台线程中执行的异步方法。 self.dummyArray只有在后台线程完成下载并找到数据后才会被赋值。但是你的函数将在块完成执行之前 return 。

你需要做的是,在query.findObjectsInBackgroundWithBlock块内做你想做的任何操作,这样它只会在后台线程完成它的操作后执行。请注意,任何需要 UI 更新的操作都必须在主线程中完成。接下来是虚拟代码。

query.findObjectsInBackgroundWithBlock {
     (objects: [AnyObject]!, error: NSError!) -> Void in
       if error == nil {

         otherfunctions()

         dispatch_async(dispatch_get_main_queue(), 
         {
             // UI updates like
             // label.text = object["name"]
         })
     }
}