当用户取消选择单元格时,我正在尝试删除数组的一项。我了解为什么我的代码无法正常工作,基本上,该数组可能包含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)
}
}
我尝试了this answer,但收到一条错误消息:
无法使用类型为((of:UserModel)'的参数列表调用'index'
答案 0 :(得分:1)
好的,所以我认为您正在显示行列表,并且在选择单元格后,将用户添加到transferUsers数组中。问题是您不存储所选用户的位置。
对此的快速解决方案是拥有一个字典,该字典将索引路径与用户结合在一起。
var transferUsers: [IndexPath: UserModel] = [:]
然后,在选择用户后,您可以执行以下操作:
transferUsers[indexPath] = usersArray[indexPath.row]
,当取消选择用户时,您可以执行以下操作:
transferUsers.removeValue(forKey: indexPath)
selectedUsersCount可以是一个属性:
var selectedUsersCount: Int {
return transferUsers.count
}
仅获取所选用户的列表,因为您有字典,所以您可以这样做:
transferUsers.values