У меня есть эта функция с именем «addToBasketButtonPressed ()» для добавления идентификатора элемента в мою корзину с количеством по умолчанию 1, а имя функции «incrementQty», вызываемое после else, проверяет, существует ли добавляемый элемент в корзине, и если это так, то просто увеличить кол-во на 1.
@objc func addToBasketButtonPressed() {
//check if user is logged in or show login view
if MUser.currentUser() != nil {
downloadBasketFromFirestore(MUser.currentId()) { (basket) in
if basket == nil {
self.createNewBasket()
}else {
self.incrementQty(basketId: basket!.id, itemToUpdate: self.item!.id, deltaQty: 1)
let qty: Int = 1
let item = self.item.id
// let dataTosave = ("Item", item!, "Qty", qty)
let dataTosave: [String: Any] = ["\(item)": qty]
basket?.itemIds.append("\(dataTosave)")
print("basket id is \(basket!.id)")
print("current item name is \(self.item.name)")
self.updateBasket(basket: basket!, withValues: [kITEMIDS: basket!.itemIds!])
Вот функция для увеличения кол-ва на 1, которая является ошибочной.
Ошибка 1 = Значение необязательного типа '[String: Any]?' необходимо развернуть в значение типа '[String: Any]' on line = для элемента в itemArray {
Ошибка 2 = Значение типа кортежа «(ключ: строка, значение: любое)» не имеет члена «индекс» в последних 3 строках
func incrementQty (basketId: String, itemToUpdate: String, deltaQty: Int) {
FirebaseReference(.Basket).document(basketId).getDocument { (documentSnapshot, error) in
if let error = error {
print(error.localizedDescription)
return
}
if let documentData = documentSnapshot?.data() {
print("item exists. update qty")
print("document data in itemIds", documentData)
let itemArray = documentData["itemIds"] as? [String: Int]
print("items in item array \(itemArray)")
for item in itemArray! {
if item["Id"] == itemToUpdate {
print("checking document with id", item["Id"])
(item["Qty"] as! Int) + deltaQty
}
}
Если я закомментирую последние 4 строки кода и внесу следующие изменения коды, комментируя «как? [String: Any] ', как показано ниже, затем в окне отладки я вижу список элементов. Если я не закомментирую «как? [Строка: Любая] ”, тогда это ноль.
let itemArray = documentData["itemIds"] // as? [String: Int]
print("items in item array \(itemArray)")
![enter image description here](https://i.stack.imgur.com/tkCTW.png)
Мой вопрос, как мне l oop через этот список чтобы проверить, существует ли уже добавляемый пользователем товар в корзину, и если это так, то просто увеличьте количество на 1, иначе добавьте количество по умолчанию 1?
примечание: данные извлекаются из базы данных Firebase.