parse.com - 在iOS

时间:2015-05-21 17:07:26

标签: ios swift parse-platform return-value

我想得到一个对象并打印出来。 所以我创建了一个函数来处理获取对象并将其返回。

问题是,对象打印得太早。

这是我的功能:

func getParseObject(){
  println("i'm inside the function")
  var query = PFQuery(className: "testClass")
  query.getObjectInBackgroundWithId("OWXnWkL") {(tempObject: PFObject?, error: NSError?) -> Void in
    if error == nil && tempObject != nil {
      println("object retrieved with success")
    } else {
      //error
    }
  }
  return object
}

这就是电话:

var data = getParseObject()
println("data is: \(data)")

这是控制台的输出:

  

我在函数

中      

数据是:

     

成功检索到的对象

解决这个问题的最佳解决方案是什么?

非常感谢!

3 个答案:

答案 0 :(得分:3)

您的问题是您正在执行异步请求,请求在后台执行。因此,在恢复服务器上的数据之前返回对象。

如果要显示需要同步的函数返回的值:

func getParseObject() -> PFObject {
    var object : PFObject?
    let query = PFQuery(className: "testClass")
    let result =  query.getObjectWithId("OWXnWkL")
    if result != nil {
        object = result
    }
        return object!
}

否则你必须使用处理程序:

var query = PFQuery(className: "testClass")
  query.getObjectInBackgroundWithId("OWXnWkL") {(tempObject: PFObject?, error: NSError?) -> Void in
    if error == nil && tempObject != nil {
      println("object retrieved with success")
      // Do something with the object!
    } else {
      //error
    }

我希望我帮助过你

Ysee       }

答案 1 :(得分:2)

您需要在异步请求的回调中返回 中的对象值,如下所示:

func getParseObject(){
  println("i'm inside the function")
  var query = PFQuery(className: "testClass")
  query.getObjectInBackgroundWithId("OWXnWkL") {(tempObject: PFObject?, error: NSError?) -> Void in
    if error == nil && tempObject != nil {
      println("object retrieved with success")
    } else {
      //error
    }

    return object // <-- Return your value here
  } // <-- Asynchronous request ends here

}

答案 2 :(得分:2)

来自getObjectInBackgroundWithId方法的闭包中的代码是异步的,需要更多时间才能完成。因此,在闭包结束后编写的代码将首先运行。

func getParseObject(){
  println("i'm inside the function")
  var query = PFQuery(className: "testClass")
  query.getObjectInBackgroundWithId("OWXnWkL") {(tempObject: PFObject?, error: NSError?) -> Void in
    if error == nil && tempObject != nil {
      println("object retrieved with success")
//THIS RUNS SECOND::::::::
        } else {
          //error
        }
      }
      return object
    }
    var data = getParseObject()
    println("data is: \(data)") //:::::THIS RUNS FIRST::::::