这是我的密码。
我正在制作收银机IPAD
我们看到的是:
当我用相同的项目名称点击该项目两次时,它会添加另一个项目
而是划船
我期待的是:
我的期望是,它只添加一行项目及其数量计数器
希望有人能帮我。我已经无法找到样本或任何信息来指导我想要实现的目标。谢谢大家
import Foundation
import SwiftUI
class OrderViewModel: ObservableObject {
@Published var orderItems = [Cart]()
@State var count: Int = 1
func AddToCart(item: item){
orderItems.append(
Cart(product_name: item.product_name, price:item.price, quantity: quantity )
)
}
}
struct Cart: Identifiable{
var id = UUID()
var product_name: String
var price: String
var quantity: Int
}
这是我的cartView,它将从OrderViewModel类打印所有@EnvironmentObject
import SwiftUI
struct CartContainer: View {
@EnvironmentObject var order: OrderViewModel
var body: some View{
ZStack{
Color("lightGrayColor")
.ignoresSafeArea()
VStack(alignment: .leading) {
VStack{
HStack{
Text("Item Name")
.font(Font.system(size: 16, weight: .light))
.frame(width:200)
Spacer()
Text("Qty.").font(Font.system(size: 16, weight: .light))
.padding(.leading, -78)
Spacer()
Text("Subtotal.").font(Font.system(size: 16, weight: .light))
.padding(.leading, -78)
}
}
.padding(.top, 10)
ScrollView{
VStack(alignment: .leading){
ForEach(order.orderItems, id:\.id){ list in
HStack{
Text(list.product_name)
.font(Font.system(size: 16, weight: .light))
.frame(width:200)
Spacer()
Text(list.price).font(Font.system(size: 16, weight: .light))
.padding(.leading, -78)
Spacer()
Text("\(list.quantity)").font(Font.system(size: 16, weight: .light))
.padding(.leading, -78)
}
.padding(.top, 10)
}
}.padding()
}.padding()
Text("Grand Total :")
.font(Font.system(size: 30, weight: .bold))
.padding(.bottom, 30)
.padding(.leading, 40)
Button(action: {
}) {
Text("Charge")
.foregroundColor(.white)
.font(Font.system(size: 30, weight: .bold))
.frame(minWidth: 0, maxWidth: .infinity)
.padding(.top, 35)
.padding(.bottom, 35)
.background(Color("ButtonGreen"))
}.padding(.bottom, -10)
}
}
.frame(width: 550)
}
}
struct CartContainer_Previews: PreviewProvider {
static var previews: some View {
CartContainer().environmentObject(OrderViewModel())
}
}
这是我从API中取出的产品列表
import SwiftUI
struct ProductsListContainer: View {
var body: some View{
ZStack{
Color(.white)
VStack{
ProductList()
}
}
.frame(maxWidth: .infinity)
}
}
struct ProductList: View{
var body: some View{
VStack {
SearchItem()
ItemListHeader()
ShowItemList()
.padding(5)
}
}
}
struct ItemListHeader: View {
var body: some View {
HStack{
Text("Item Name")
.font(Font.system(size: 20, weight: .heavy))
.frame(width:300)
Spacer()
Text("Price").font(Font.system(size: 20, weight: .heavy))
.padding(.leading, -78)
Spacer()
Text("Qty.").font(Font.system(size: 20, weight: .heavy))
.padding(.leading, -78)
}
Divider()
}
}
struct ShowItemList: View {
@StateObject var itemVM = ProductViewListModel()
@EnvironmentObject var order: OrderViewModel
var body: some View {
ScrollView {
ForEach(itemVM.item) { dataPoint in
ZStack{
HStack{
Text(dataPoint.product_name)
.font(.headline)
.frame(width:300)
Spacer()
Text(dataPoint.price)
Spacer()
Text("\(dataPoint.quantity)")
}
.padding()
.padding(.leading, -20)
.padding(.trailing, 20)
.padding(.top, 5)
.padding(.bottom, 5)
}.onTapGesture {
self.order.AddToCart(item: dataPoint.product)
}
Divider()
}
}
.padding()
}
}