取消选择表格视图时从数组中删除对象

时间:2019-02-27 02:21:56

标签: ios arrays swift object

我有一个表格视图,其中显示了具有 id,名称,价格和数量 (从 itemsArr数组中获取)的物品列表。当我选择一项时,我会附加事物的详细信息 id,名称,价格,数量数组(项目数组)。然后,当我取消选择项目时,已附加到该数组中的项目的详细信息( id,名称,价格,数量 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)
    }
}

1 个答案:

答案 0 :(得分:0)

如果您有一个数组itemsArr,并且知道要删除的项目的ID,则可以简单地使用

let filteredArray = itemsArr.filter { $0.id != idToDelete }