【发布时间】:2019-02-27 02:21:56
【问题描述】:
我有一个表格视图,其中显示了具有 id、名称、价格和数量 的事物列表(从 itemsArr 数组 获得)。当我选择一个商品时,我会将商品的详细信息(名称、价格、数量)添加到一个数组(项目数组)。当我取消选择商品时,已附加到该数组中的商品的详细信息(名称、价格、数量) strong>应该删除。我没有问题将详细信息附加到数组中,但我的问题是我不知道从大批。以下是我的代码:
var item = MyList()
var items = [MyList]()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
cell?.accessoryType = .checkmark
if let itemSel = itemsArr?[indexPath.row] {
delegate?.didSelectItemsListItem(id: itemSel.id, name: itemSel.name, price: itemSel.price)
// Add item details into array
item.id = itemSel.id
item.name = itemSel.name
item.price = itemSel.price
item.quantity = 1
self.items.append(item)
print("Added items: ", self.items)
}
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
cell?.accessoryType = .none
// Remove item details from array
if let itemdeSel = itemsArr?[indexPath.row] {
delegate?.didDeselectItemsListItem(id: itemdeSel.id, name: itemdeSel.name, price: itemdeSel.price)
if let index = itemsArr?.index(where: { $0.id == itemdeSel.id }) {
// removing item
self.items.remove(at: index)
print("Items after removed: ", self.items)
}
}
}
注意到所有商品的数量都是 1。我想尝试使用过滤方法,但我担心所有数量的其他项目也会被删除,因为数量是相同的。下面是 items 数组的示例(项目已附加到其中:
[(id: 4, name: "book", price: "3.00", quantity: 1), (id: 2, name: "pen", price: "1.00", quantity: 1)]
更新: 我实际上可以只使用过滤器方法。我不知道过滤方法可以删除该项目的全部细节。下面是我最终的 deSelect 代码:
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
cell?.accessoryType = .none
// Remove item details from array
if let itemdeSel = itemsArr?[indexPath.row] {
delegate?.didDeselectItemsListItem(id: itemdeSel.id, name: itemdeSel.name, price: itemdeSel.price)
let filteredArray = self.items.filter { $0.id != itemdeSel.id }
self.items.removeAll()
self.items = filteredArray
print("Items after removed: ", self.items)
}
}
【问题讨论】:
-
如果
id的值是唯一的,那么它为什么要删除其他所有值? -
didSelectRowAt中的这个item变量是什么?是实例变量吗? -
@SShahid,对不起,我不明白你的问题。但是,是的,id 值是唯一的。您指的是过滤方法吗?
-
@Tj3n, var item = MyList(), MyList 是一个模型。并且 items 数组来自 var items = [MyList]()
-
@Lynn,在您的 didDeselectRowAt 函数中,您正在删除对象。如果您通过检查它们的
id来删除它们,为什么您认为过滤方法不起作用? :)