改变单个产品的数量



我不能增加每一个产品的计数器,每次我点击+它改变了所有其他的计数器,我怎么能解决它?我必须保留共享数据,因为我有另外两个可以修改且必须显示计数器的视图!

我将所有数量相等的图像附加在一起即使我只改变了一个

输入图片描述

struct Product: Identifiable,Hashable {
var id = UUID().uuidString
var categoria: ProductType
var codice: String
var descrizione: String = ""
var prezzo: String
var immagine: String = ""
}
class SharedDataModel: ObservableObject {

@Published var cartProducts: [Product] = []
@Published var counterQ: Int = 0
func addToCart(product: Product) {
if !cartProducts.contains(where: {$0.id == product.id}) {
cartProducts.append(product)
}
counterQ += 1
}

func removeToCart(product: Product) {
if !cartProducts.contains(where: {$0.id == product.id}) {
cartProducts.append(product)
}
counterQ -= 1
}
struct ProductCardView: View{

@Binding var product: Product
@EnvironmentObject var sharedData: SharedDataModel

var body: some View{
Button (action: {
sharedData.removeToCart(product: product)
} , label: {
Image(systemName: "minus")
.frame(width: 25, height: 30)
.foregroundColor(.black)
})
Text("(sharedData.counterQ)")
.frame(width: 25, height: 30)
Button(action: {
sharedData.addToCart(product: product)
} , label: {
Image(systemName: "plus")
.frame(width: 25, height: 30)
.foregroundColor(.black)
})
}
}

我无法隔离每个产品的柜台,目前我已经尝试了所有我需要你的帮助,非常感谢!!

您有一个计数器的共享属性,这意味着它对每个产品都是相同的。你应该做的是:

  1. SharedDataModel中移除counterQ&添加到Product

  2. 当您编辑计数器时,使用您刚刚添加的计数器:

    func addToCart(product: Product) {
    if let index = cartProducts.firstIndex(of: product) {//make Product conform to Equatable
    cartProducts[index].counter += 1
    }else {
    cartProducts.append(product)
    }
    }
    func removeFromCart(product: Product) {
    guard let index = cartProducts.firstIndex(of: product) else {return}
    if cartProducts[index].counter > 1 {
    cartProducts[index] -= 1
    }else {
    cartProducts.remote(at: index)
    }
    }
    
  3. 您从购物车中删除的逻辑是错误的,如果没有找到,它会添加产品。在上面的代码中更新。

  4. 你需要在你的视图中使用这个属性:

    Text("(product.counter)")
    .frame(width: 25, height: 30)
    

相关内容

  • 没有找到相关文章

最新更新