首页 > 解决方案 > 使用 DispatchGroup 填充对象的数组无法正常工作

问题描述

我正在尝试用更多对象填充我的对象数组。我一直在使用调度组没有问题,但现在我必须使用一个数组,它不起作用。我让数组为空,就像它从未填充过一样。我对 GCD 不太熟悉,我想知道我做错了什么。

我第一次和客户一起使用 GCD 时,它可以工作,但是当我再次将它用于所有项目时,它就不行了。我不知何故知道它不是在等待所有项目都被处理,而是发送从一开始就初始化的空数组。

希望有人可以帮助我。干杯!

static func loadAll(_ completion: @escaping ([Ticket1]?) -> Void) -> UInt {
    return FirebaseService.instance.readAll(from: .tickets, returning: Ticket1.self, { (tickets) in
        if tickets != nil {
            var result = [Ticket1]()
            let dispatchGroup = DispatchGroup()

            for var ticket in tickets! {
                dispatchGroup.enter()
                Customer.loadSingleObject(withID: ticket.customerID, { (customer) in
                    if customer != nil {
                        ticket.customer = customer

                        for itemID in ticket.itemsID {
                            dispatchGroup.enter()
                            Item.loadSingleObject(withID: itemID, { (item) in
                                if item != nil {
                                    ticket.items?.append(item!)
                                } else {
                                    completion(nil)
                                }
                                dispatchGroup.leave()
                            })
                        }
                        result.append(ticket)
                    } else {
                        completion(nil)
                    }
                    dispatchGroup.leave()
                })
            }

            dispatchGroup.notify(queue: .main, execute: {
                result = result.sorted(by: { $0.createdAt > $1.createdAt })
                completion(result)
            })
        } else {
            completion(nil)
        }
    })
}

标签: iosarraysswiftobjectgrand-central-dispatch

解决方案


推荐阅读