Я пытаюсь получить общую сумму корзины покупок в Firestore, выполняя серию циклических вызовов для расчета суммы товаров в корзине.
Корзина покупок хранится в таблицес именем carts и представление после появления помещается в словарь в приложении cartCache, типа [String: Int]? где ключ - это UID для элемента, а значение - количество элемента. Однако цена предмета хранится в другой коллекции под названием items . Я хочу вычислить сумму только тогда, когда представление появляется или исчезает, а затем сделать так, чтобы оно отображалось в 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?