使用DispatchGroup填充对象的数组不能正常工作

时间:2018-05-17 21:45:01

标签: ios arrays swift object grand-central-dispatch

我正在尝试使用更多对象填充对象的数组。我一直在使用调度组没有问题,但现在我必须使用数组,它不起作用。如果它从未填充过,我将数组清空。我对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)
        }
    })
}

0 个答案:

没有答案