Удалить объекты из массива при отмене выбора табличного представления - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть табличное представление, которое показывает список вещей с идентификатор, имя, цена и количество (получено из itemsArr array ).Когда я выбираю один предмет, я добавляю детали вещи ( идентификатор, имя, цена, количество ) в массив (массив элементов) .И когда я отменяю выбор элемента , , детали ( идентификатор, имя, цена, количество ) элемента, добавленного в этот массив , должныбыть удаленным .У меня нет проблем с добавлением деталей в массив, но моя проблема в том, что я не знаю , каков лучший способ удалить все детали этого элемента из массива.Ниже мой код:

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 .Я хочу попробовать использовать метод фильтра, но я боюсь, что все количество других предметов также будет удалено, так как количество одинаково.Ниже приведен пример массива элементов (к которому элементы были добавлены:

 [(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 голосов
/ 27 февраля 2019

Если у вас есть массив, itemsArr, и вы знаете идентификатор элемента, который хотите удалить, вы можете просто использовать,

let filteredArray = itemsArr.filter { $0.id != idToDelete }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...