gpt4 book ai didi

arrays - Swift 异步完成以返回自定义类中的数组

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:32 26 4
gpt4 key购买 nike

我将尽我所能解释这一点。

我正在使用 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
})

这将返回错误:“调用中的额外参数完成”我不确定如何在 block 的末尾添加完成,所以我在 block 周围添加了 () 并插入了完成。这显然是错误的,但我不确定如何按照马特的建议在 block 的末尾添加完成

更新 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
}

最佳答案

在函数 queryDataInBackgroundWithBlock 中,您会收到名为 completion 的完成 block 。它需要一个参数。所以你做的最后一件事,在你有了数据之后,就是调用它,把数据交给它:

completion(result:myData)

由于 query.findObjectsInBackgroundWithBlock 本身是异步的,因此您需要将调用作为 inside query.findObjectsInBackgroundWithBlock block 的最后一件事>.

像这样:

func queryDataInBackgroundWithBlock(
parseClass:String, parseObject:String, sortDescriptor:NSSortDescriptor,
completion: (result: Any)->Void)
{
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!)")
}
completion(result:self.arrayOfObjects)
}

}

关于arrays - Swift 异步完成以返回自定义类中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27497829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com