Удаление элемента Array, когда пользователь didDeselectRowAt? - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь удалить элемент массива, когда пользователь отменяет выбор ячейки. Я понимаю, почему мой код не работает, в основном массив может содержать 5 элементов, и если будет 100 ячеек и пользователь выберет ячейку 10, попытка отменить выбор с помощью indexPath.row приведет к сбою, поскольку массив содержит только 5 элементов. Дело в том, что когда пользователь отменяет выбор ячейки, он должен удалить соответствующий элемент из массива. Это то, что я не уверен, как это сделать

var transferUsers = [UserModel]()

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    if let cell = tableView.cellForRow(at: indexPath) {
        selectedUsersCount -= 1
        if selectedUsersCount == 0 {
            nextButton.isEnabled = false
        }
        cell.accessoryType = .none
        transferUsers.remove(at: indexPath.row)
    }
}

Я пытался этот ответ , но я получаю сообщение об ошибке:

Невозможно вызвать 'index' со списком аргументов типа '(of: UserModel)'

1 Ответ

0 голосов
/ 24 августа 2018

Хорошо, я думаю, что вы отображаете список строк, и когда ячейка выбрана, вы добавляете пользователя в массив TransferUsers. Проблема в том, что вы не сохраняете местоположение выбранного пользователя.

Быстрое решение этой проблемы - создать словарь, который объединяет путь индекса с пользователем.

var transferUsers: [IndexPath: UserModel] = [:]

затем, когда пользователь выбран, вы делаете это:

transferUsers[indexPath] = usersArray[indexPath.row]

и когда пользователь отменяется, вы делаете это:

transferUsers.removeValue(forKey: indexPath)

selectedUsersCount может быть свойством:

var selectedUsersCount: Int {
    return transferUsers.count
}

, чтобы получить только список выбранных пользователей, поскольку у вас есть словарь, вы должны сделать это так:

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