我有一个单一的音调,当用户选择产品时写入数据,之后我将此数据传递到购物车并显示它
''' 导入 UIKit
最后一类 BasketModel {
static let shared = BasketModel()
var records: [Products] = []
private init() {}
func addProducts(_ product: Products) {
self.records.append(product)
}
func clearProducts() {
self.records = []
}
}
结构产品{
let img: UIImage
let name: String
let price: Int
let type: String
}'''
我有三种产品(菜肴、浇头、饮料)我想用这样的数据创建 3 个部分菜肴、浇头、饮料这里是我的表格代码
''' 导入 UIKit
类 BasketVC: UIViewController {
@IBOutlet weak var fullBasketview: UIView!
@IBOutlet weak var bottomBasketView: UIView!
@IBOutlet weak var choiceBtn: UIButton!
@IBOutlet weak var basketTableView: UITableView!
@IBOutlet weak var totalPriceLabel: UILabel!
@IBOutlet weak var orderButton: UIButton!
var presenter = false
var totalPrice = 0
var sections: [String] = ["Блюда","Топпинги","Наппитки"]
var product = [BasketModel.shared.records]
override func viewDidLoad() {
super.viewDidLoad()
choiceBtn.layer.cornerRadius = 20
choiceBtn.layer.masksToBounds = true
basketTableView.delegate = self
basketTableView.dataSource = self
orderButton.layer.cornerRadius = 20
orderButton.layer.masksToBounds = true
if !BasketModel.shared.records.isEmpty {
fullBasketview.isHidden = false
for item in BasketModel.shared.records {
totalPrice += item.price
totalPriceLabel.text = "\(totalPrice) Руб."
}
} else {
fullBasketview.isHidden = true
}
}
@IBAction func unwindBasketVC(for unwindSegue: UIStoryboardSegue) {}
}
扩展 BasketVC: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sections[section]
}
func numberOfSections(in tableView: UITableView) -> Int {
return sections.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return product[section].count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "BasketCell", for: indexPath) as! BasketCell
cell.basketImg.image = product[indexPath.section][indexPath.row].img
cell.basketName.text = product[indexPath.section][indexPath.row].name
cell.basketPrice.text = "\(product[indexPath.section][indexPath.row].price) Руб."
return cell
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
BasketModel.shared.records.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
totalPrice = 0
for item in BasketModel.shared.records {
totalPrice += item.price
totalPriceLabel.text = "\(totalPrice) Руб."
}
}
if BasketModel.shared.records.isEmpty {
fullBasketview.isHidden = true
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
}
'''
在我去购物车后,错误出现在这里 ''' func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return product[section].count -> Fatal error: Index out of range
}
'''
请帮帮我
您在其中显示部分和产品的逻辑存在差异 - 您有 3 个部分,但在这里它将
var product = [BasketModel.shared.records]
product
只包含一个嵌套数组,其中包含所有产品而没有划分为部分如果您的产品位于一个数组中(假设其中有 10 个,并且它们用于不同的部分),那么您首先需要根据某些属性对它们进行排序,例如
type
(将什么归于菜肴、浇头等)