如何在 Swift 中根据按钮单击更新文本值

问题描述 投票:0回答:1

我在 swiftUI 中有购物车应用程序。目前,当我单击“添加到购物车”按钮时,它可以将产品记录添加到视图中。但问题就在这里。当我单击按钮两次时,再次获得相同的产品记录,更直接地说,有重复的记录和秒数问题是,我也希望更新产品的数量,但我不知道该怎么做 请建议我用更好的方式来做。

这是我的列表视图代码..

import SwiftUI struct ProductListView: View { var body: some View { NavigationStack { VStack { if viewModel.productLists.count > 0 && !viewModel.refreshing { List(viewModel.productList, id: \.self) { product in ProductListViewCell(productData: product) } .listStyle(.grouped) } } } .navigationTitle(Text("Product List")) } } }
这是单元格的代码..

struct ProductListViewCell: View { let productData: Product @EnvironmentObject var order: Order var body: some View { HStack { if let url = URL(string: productData.thumbnail) { ProductAsyncImageView(url: url) .frame(width: 150, height: 150) .mask(RoundedRectangle(cornerRadius: 16)) } VStack(alignment: .leading,spacing: 5) { Text("Name: " + (productData.title)) .frame(maxWidth: .infinity, alignment: .leading) .font(.headline) Text("Description: " + (productData.description)) .frame(maxWidth: .infinity, alignment: .leading) .multilineTextAlignment(.leading) Text("Price: £" + String(productData.price)) .frame(maxWidth: .infinity, alignment: .leading) .font(.subheadline) Button { order.add(item: productData) } label: { HStack { Image(systemName: "cart.badge.plus") Text("Add to Cart") .fontWeight(.semibold) } .foregroundColor(.white) .frame(width: 150 , height: 40) } .background(Color(.systemBlue)) .cornerRadius(10) } } } }
这是我的订单课程..

import SwiftUI class Order: ObservableObject { @Published var product = [Product]() func add(item: Product) { product.append(item) } func remove(item: Product) { if let index = product.firstIndex(of: item) { product.remove(at: index) } } }
这是订单查看的代码..

struct OrderView: View { @EnvironmentObject var order: Order var body: some View { NavigationStack { List { Section { ForEach(order.product) { item in HStack(spacing: 20) { if let url = URL(string: item.thumbnail) { ProductAsyncImageView(url: url) .frame(width: 90, height: 90) .padding(.bottom, -10) .clipShape(Circle()) } VStack(alignment: .leading) { Text("Name: \(item.title)") Text("Price :£\(item.price)") Button("Show details") { }.foregroundColor(.gray) } HStack { Image(systemName: "multiply") Text("1") } } } } Section { NavigationLink("Place Order") { } } } .navigationTitle("Order") } } }
这是产品列表视图的屏幕截图..

这是当我三次单击“添加到”按钮时有重复记录的屏幕截图,但我只想要数量为 3 的单个记录。

ios swift swiftui shopping-cart modifier
1个回答
0
投票
  • Product

     类中,您应该有一个 
    quantity
     变量。

  • Order.add(item:)

    中,您应该检查
    Product
    是否存在于
    products
    数组中,并增加其
    quantity
    ,如下所示:

class Order: ObservableObject { @Published var products = [Product]() func add(item: Product) { var exists = false products.forEach { product in if product.id == item.id { exists = true product.quantity += 1 } } if !exists { product.append(item) } } //The rest of your code... }

    最后需要将
  • quantity
    中的
    OrderView
    显示出来,如下:
... HStack { Image(systemName: "multiply") Text(item.quantity) } ...

修正了

Order

课程中的拼写错误:
product:[Product]
 -> 
products:[Product]

© www.soinside.com 2019 - 2024. All rights reserved.