Быстрое добавление и удаление элемента в массив на основе выбора и отмены выбора ячейки UITableview - PullRequest
0 голосов
/ 02 ноября 2019

В моем случае я загружаю JSON данные в Tableview с помощью codable. В табличном представлении доступны несколько вариантов select и deselect. Теперь мне нужно Insert выбранные значения в один array и в то же время, если пользователь отменяет выбор ячейки, необходимо remove соответствующее значение из того же массива. Сохраненные данные массива я собираюсь использовать в нескольких viewcontroller. Как этого добиться?

Кодируемый JSON

// MARK: - Welcome
struct Root: Codable {
    let status: Bool
    let data: [Datum]
}

// MARK: - Datum
struct Datum: Codable {
    let userid, firstname, designation: String?
    let profileimage: String?
}

Моя кодовая база для делегата Tableview

var studentsData = [Datum]()
var sessionData = [Datum]()

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.studentsData.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell:MyCustomCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! MyCustomCell
        let item = self.studentsData[indexPath.row]
        cell.nameCellLabel.text = item.firstname
        cell.subtitleCellLabel.text = item.designation
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        let item = self.studentsData[indexPath.row]
        if let cell = tableView.cellForRow(at: indexPath) {
            if cell.accessoryType == .checkmark {
                cell.accessoryType = .none
                // UnCheckmark cell JSON data Remove from array
                if let index = sessionData.index(of:item) {
                    sessionData.remove(at: index)
                }
                print(sessionData)

            } else {
                cell.accessoryType = .checkmark
                // Checkmark selected data Insert into array
                self.sessionData.append(item)
                print(sessionData)
            }
        }
    }

1 Ответ

0 голосов
/ 02 ноября 2019

Вы можете удалить элемент внутри массива, выполнив поиск его индекса

let index = try? array.firstIndex(where: { $0. userid == sessionData[indexPath.row].userid })

Или вы можете использовать это Проверка, содержит ли массив пользовательских объектов определенный пользовательский объект

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...