Swift在Parse返回值之前返回func中的值

时间:2014-10-28 02:01:19

标签: swift parse-platform

我试图找出为什么swift返回我在函数开头声明的0,而不是返回我从Parse设置它的数字。

func getPhotosSubmitted(quest: String) -> Int{
   var num = 0
   var query = PFQuery(className:"Quest")

    query.whereKey("questName", equalTo:quest)

    query.findObjectsInBackgroundWithBlock {

        (objects: [AnyObject]!, error: NSError!) -> Void in

        if error == nil {

            // The find succeeded.

          //  NSLog("Successfully retrieved \(objects.count) scores.")

            // Do something with the found objects

            for object in objects {

               num = (object["numOfSubmittedPhotos"] as Int)

                println("---\(num)")
            }
        } else {
            // Log details of the failure
            //NSLog("Error: %@ %@", error, error.userInfo!)
        }
    }

   return num
}

此func每次都会返回0,就像它不等待:num = (object["numOfSubmittedPhotos"] as Int) 当我尝试返回(object["numOfSubmittedPhotos"] as Int)时,它会抛出一个错误,指出Int不能转换为void 我打印一个测试行,看看我从Parse获得了什么值,它是不是0的正确值。有没有人在这段代码中看到问题?

1 个答案:

答案 0 :(得分:0)

query.findObjects ...创建一个将永远运行的块。在那之后,你返回num。现在就发生了。

由于getNumberOfPhotos想要返回一个仅在将来可用的值,因此它也必须是异步调用。这意味着返回必须是要在将来执行的块或类似的东西。

正如有人所说,花一天时间阅读iOS中的异步,专注于块而不是其他方法。