我在 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 的单个记录。
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]