我将尽力解释这一点。
我正在使用 Parse.com 并从 Parse 数据库类返回数据。我想将此 parse.com 调用放在自定义类中自己的函数中。我遇到的问题是完成。它去哪儿了?我尝试了许多不同版本的将它添加到我的函数中,但它不起作用。
下面是接受类名、表名和排序描述符并返回一个数组的函数:
func queryDataInBackgroundWithBlock(parseClass:String, parseObject:String, sortDescriptor:NSSortDescriptor) -> [Any]
当我将完成添加到它时,我使用(可能不正确):
func queryDataInBackgroundWithBlock(parseClass:String, parseObject:String, sortDescriptor:NSSortDescriptor, completion: (result: Any)->Void)
现在在函数内部,我使用 Parse.com 代码出去获取数据
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
// Do something with the found objects
for object in objects {
self.arrayOfObjects.append(object[parseObject]!)
}
} else {
// Log details of the failure
println("Error: \(error) \(error.userInfo!)")
}
}
我的目标是将参数发送到我的类函数,从 parse.com 获取数据,然后在异步调用之后将数据作为数组返回
我试图这样称呼它:
myClass.queryDataInBackgroundWithBlock("databaseName", parseObject: "columnName", sortDescriptor: orderBy){
(result: Any) in
println(result)
}
这几乎就像它是一个嵌套完成。完成后如何返回数组?它是交给然后返回它的函数,还是需要在嵌套代码中返回,还是什么?它检索数据,但问题是完成后的返回。
更新:正如我在下面的评论中所说:
query.findObjectsInBackgroundWithBlock({
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
// Do something with the found objects
for object in objects {
self.arrayOfObjects.append(object[parseObject]!)
}
} else {
// Log details of the failure
println("Error: \(error) \(error.userInfo!)")
}
}, completion: {
//do something here
})
这将返回错误:“调用中的额外参数完成”我不确定如何在块的末尾添加完成,所以我在块周围添加了 () 并插入了完成。这显然是错误的,但我不确定如何按照 matt 的建议在块的末尾添加完成
更新 2:
func queryDataInBackgroundWithBlock(parseClass:String, parseObject:String, sortDescriptor:NSSortDescriptor) -> [Any]{
var query = PFQuery(className:parseClass)
if sortDescriptor.key != "" {
query.orderBySortDescriptor(sortDescriptor)
}
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
// Do something with the found objects
for object in objects {
self.arrayOfObjects.append(object[parseObject]!!)
}
} else {
// Log details of the failure
println("Error: \(error) \(error.userInfo!)")
}
}
return self.arrayOfObjects //<-- needs to move to completion
}