我不能增加每个产品的计数器,每次我点击+它也会改变所有其他产品的计数器,我该如何修复它?我必须保留共享数据,因为我有另外两个可以修改的视图,必须显示计数器!
我附上的图像与所有的数量相等,即使我只改变了一个
enter image description here
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条答案
按热度按时间b4lqfgs41#
您有一个计数器的共享属性,这意味着它对每个产品都是相同的。您应该做的是:
1.从
SharedDataModel
中删除counterQ
并将其添加到Product
。1.编辑计数器时,请使用刚添加的计数器:
1.您从购物车中删除的逻辑是错误的,如果没有找到产品,它将添加产品。在上面的代码中更新了它。
1.您需要在视图中使用该属性: