我想得到一个对象并打印出来。 所以我创建了一个函数来处理获取对象并将其返回。
问题是,对象打印得太早。
这是我的功能:
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)")
这是控制台的输出:
我在函数
中数据是:
成功检索到的对象
解决这个问题的最佳解决方案是什么?
非常感谢!
答案 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::::::