加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

arrays – Swift Async完成以返回自定义类中的Array

发布时间:2020-12-14 04:42:01 所属栏目:百科 来源:网络整理
导读:我将尽力解释这个问题. 我正在使用Parse.com并从Parse数据库类返回数据.我想把这个parse.com调用放在自定义类中的自己的函数中.我遇到的问题是完成.它去哪儿了?我已经尝试了很多不同版本的添加到我的功能,但它无法正常工作. 以下是获取类名,表名和排序描述
我将尽力解释这个问题.

我正在使用Parse.com并从Parse数据库类返回数据.我想把这个parse.com调用放在自定义类中的自己的函数中.我遇到的问题是完成.它去哪儿了?我已经尝试了很多不同版本的添加到我的功能,但它无法正常工作.

以下是获取类名,表名和排序描述符并返回数组的函数:

func queryDataInBackgroundWithBlock(parseClass:String,parSEObject:String,sortDescriptor:NSSortDescriptor) -> [Any]

当我添加完成时,我使用(可能不正确):

func queryDataInBackgroundWithBlock(parseClass: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
})

这将返回错误:“调用额外参数完成”
我不知道如何在块的末尾添加完成,所以我在块周围添加了()并插入了完成.这显然是错误的,但我不知道如何在亚马逊建议的块结束时添加完成

更新2:

func queryDataInBackgroundWithBlock(parseClass: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(result:myData)

由于query.findObjectsInBackgroundWithBlock本身是异步的,因此您需要将该调用作为query.findObjectsInBackgroundWithBlock块中的最后一个内容.

像这样:

func queryDataInBackgroundWithBlock(
    parseClass:String,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)
    }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读