gpt4 book ai didi

swift - 需要在一系列的 getDocument 价格查找之后获取购物车总和

转载 作者:行者123 更新时间:2023-11-28 11:25:17 26 4
gpt4 key购买 nike

我试图通过执行一系列计算购物车中商品总和的 for 循环调用来获取 Firestore 中购物车的总数。

购物车存储在一个名为 carts 的表中,出现时的 View 被拉入一个名为 cartCache 的应用程序内部字典,类型为 [String: Int]?其中键是项目的 UID,值是项目的数量。但是,商品的价格存储在另一个名为 items 的集合中。我只想计算 View 出现或消失时的总和,然后让它出现在 UILabel 中。

因此,为了获得总和并将其报告给用户(通过修改标签或将其写入购物车),我需要遍历购物车中的每件商品并通过 API 调用 getDocument 获取价格(完成:)。然而,这意味着总和的计算是异步的,这不一定是个问题,但我不确定如何为 for 循环提供完成处理程序。有更简单的方法吗?

for item in self.cartCache!.keys
{
let doc = self.itemCollectionRef.document(item).getDocument
{
(itemDocument, error) in
{
guard let itemDocument = itemDocument, itemDocument.exists else {return}
sum += itemDocument.data()!["price"] as! Int
}
}
}

//Do something with sum (no guarantee at this point that sum is actually calculated, how do I add
//a completion handler to a for loop or obtain multiple field's values at once?

最佳答案

你需要使用的是一个DispatchGroupDispatchGroup 允许您一次运行多个异步函数,并且有一个“完成处理程序”,在每个异步函数完成时调用一次。一些基本代码看起来像这样:

//Create your dispatch group. This is going to manage all of your asynchronous tasks and run some code when they complete
let group = DispatchGroup()

for x in array {
//Call enter before the asynchronous function
group.enter()
asnynchronousFunction(completion: {
//Call leave once the asynchronous function completes
group.leave()
})
}

group.notify(queue: .main, execute: {
//Inside of group.notify, run whatever code you want to run upon completion of all asynchronous functions.
//group.notify is your "completion handler"
})

因此,对于您的实例,它看起来像这样:

let group = DispatchGroup()
for item in self.cartCache!.keys
{
group.enter()
let doc = self.itemCollectionRef.document(item).getDocument
{
(itemDocument, error) in
{
guard let itemDocument = itemDocument, itemDocument.exists else {return}
sum += itemDocument.data()!["price"] as! Int
group.leave()
}
}
}

group.notify(queue: .main, execute: {
//All of your asynchronous functions have completed. You are ready to move on
})

来源:https://developer.apple.com/documentation/dispatch/dispatchgroup

更深入:https://www.raywenderlich.com/5371-grand-central-dispatch-tutorial-for-swift-4-part-2-2#toc-anchor-002

关于swift - 需要在一系列的 getDocument 价格查找之后获取购物车总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58368281/

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