如何根据列表中的项目数量创建多个变量?

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

我有一个列表,其中包含从 Firebase 数据库中提取的项目。我想要每个项目都有单独的计数器,但有一个变量没有为我执行此操作,而是为列表中的每个项目添加 1。附上图片来展示。

我有代码:

    @State var quantityItem: Int = 0
    var body: some View {
            List (menumodel.list) { item in
            VStack{
                HStack{
                    VStack {
                        Text(item.id)
                            .frame(maxWidth: .infinity, alignment: .leading)
                        Text("123 kcal, 330ml")
                            .font(.caption)
                            .foregroundStyle(Color.gray)
                            .frame(maxWidth: .infinity, alignment: .leading)
                        
                    }
                    .frame(maxWidth: .infinity, alignment: .leading)
                    .padding(.vertical)
                    HStack{
                        Button {
                            if quantityItem > 0 {
                                self.quantityItem -= 1
                            }
                            
                        }label: {
                            Image(systemName: "minus.circle")
                                .tint(Color.black)
                        }
                        Text("\(quantityItem)")
                        Button {
                            self.quantityItem += 1
                        }label: {
                            Image(systemName: "plus.circle")
                                .tint(Color.black)
                        }
                    }.frame(maxWidth: .infinity, alignment: .trailing)
                        .padding(.all)
                }
            }
        }
        
        .listStyle(GroupedListStyle())
        .buttonStyle(BorderlessButtonStyle())
        
        
}
    }
#Preview {
    DrinksMenuView()
}```

swift firebase swiftui
1个回答
0
投票

你需要使用字典来计算每个列表上的项目

@State private var quantities: [String: Int] = [:]

按如下方式更改按钮:

 HStack {
                        Button {
                            decrementQuantity(for: item.id)
                        } label: {
                            Image(systemName: "minus.circle")
                                .tint(Color.black)
                        }
                        Text("\(quantities[item.id, default: 0])")
                        Button {
                            incrementQuantity(for: item.id)
                        } label: {
                            Image(systemName: "plus.circle")
                                .tint(Color.black)
                        }
                    }
                    .frame(maxWidth: .infinity, alignment: .trailing)
                    .padding(.all)

然后使用这些:

   private func incrementQuantity(for id: String) {
            quantities[id, default: 0] += 1
        }
    
        private func decrementQuantity(for id: String) {
            if let currentCount = quantities[id], currentCount > 0 {
                quantities[id]! -= 1
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.