Используя код Swift 5.1 Мне удалось обновить базу данных Firestore, добавив элементы в текущую корзину пользователей, но не смог добавить / обновить количество. В настоящее время, если я хочу добавить товар, который уже существует в корзине, он просто добавляет другую строку, но я хотел просто обновить количество.
Можете ли вы посоветовать мне, как создать функцию, которая добавляет количество?
Вот коды, которые у меня есть. Вставлены только соответствующие разделы кода.
Функция базы данных Firestore в моем файле Helper:
enum FCollectionReference: String {
case User
case Category
case Items
case Basket
case Orders
}
func FirebaseReference(_ collectionReference: FCollectionReference) -> CollectionReference {
return Firestore.firestore().collection(collectionReference.rawValue)
}
Вот код в моем файле модели корзины, используя
class Basket {
var id: String!
var ownerId: String!
var itemIds: [String]!
var delivery: Float!
var admin: Float!
var quantity: Int!
init() {
}
init(_dictionary: NSDictionary) {
id = _dictionary[kOBJECTID] as? String
ownerId = _dictionary[kOWNERID] as? String
itemIds = _dictionary[kITEMIDS] as? [String]
delivery = _dictionary[kDELIVERY] as? Float
admin = _dictionary[kADMIN] as? Float
quantity = _dictionary[kQUANTITY] as? Int
}
}
//MARK: Helper functions
func basketDictionaryFrom(_ basket: Basket) -> NSDictionary {
return NSDictionary(objects: [basket.id, basket.ownerId, basket.itemIds, basket.quantity], forKeys: [kOBJECTID as NSCopying, kOWNERID as NSCopying, kITEMIDS as NSCopying, kQUANTITY as NSCopying,kDELIVERY as NSCopying, kADMIN as NSCopying])
}
//MARK: - Update basket
fun c updateBasketInFirestore (_ basket: Basket, withValues: [String: Any], завершение: @escaping (_ error: Error?) -> Void) {FirebaseReference (.Basket) .document (basket.id) .updateData (withValues) {(ошибка) в завершении (ошибка)
Коды в элементе управления видом для добавления товаров в корзину:
@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 {
basket?.itemIds.append(self.item.id)
self.updateBasket(basket: basket!, withValues: [kITEMIDS: basket!.itemIds])
}
}
} else {
showLoginView()
}
}
private func updateBasket(basket: Basket, withValues: [String : Any]) {
updateBasketInFirestore(basket, withValues: withValues) { (error) in
if error != nil {
self.hud.textLabel.text = "Error: \(error!.localizedDescription)"
self.hud.indicatorView = JGProgressHUDErrorIndicatorView()
self.hud.show(in: self.view)
self.hud.dismiss(afterDelay: 2.0)
print("error updating basket", error!.localizedDescription)
}else {
self.hud.textLabel.text = "Added to Basket"
self.hud.indicatorView = JGProgressHUDSuccessIndicatorView()
self.hud.show(in: self.view)
self.hud.dismiss(afterDelay: 2.0)
}
}
}
Чтобы уточнить мой запрос, что мне нужно изменить / переставить мою кодировку так, чтобы хранилище баз данных Cloud Cloud было расположено в порядке, показанном на прикрепленном снимке экрана. Первый снимок экрана с текущим макетом в последнем столбце, и я пытаюсь изменить его на макет, показанный на втором снимке экрана?
![enter image description here](https://i.stack.imgur.com/f7EI4.jpg)