如果我点击单元格,我需要arrSelectedRowsBuy中的选定单元格eventListData?.result?.events?[indexPath. row].id not(indexPath.row),如果我再次点击它,则选定的id应从arrSelectedRowsBuy中删除
我需要从eventListData?.result?.events?[indexPath.row].id
到arrSelectedRowsBuy
选择/删除ID
但在我的代码中,我在arrSelectedRowsBuy中获取选定的行索引,如[0,1,2,3],但我的eventListData?.result?.events?[indexPath.row].id
将是[22,8,4]。
**代码:**这里,如果我像这样附加arrSelectedRowsBuy.append(eventListData?.result?.events?[indexPath.row].id ?? 0)
,那么总代码不工作
var arrSelectedRowsBuy:[Int] = []
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "EventListCell", for: indexPath) as! EventListCell
let indexData = eventListData?.result?.events?[indexPath.row]
cell.titleLbl.text = indexData?.event_title
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell:EventListCell = tableView.cellForRow(at: indexPath) as! EventListCell
let indexData = eventListData?.result?.events?[indexPath.row]
if arrSelectedRowsBuy.contains(indexPath.row) {
if let index = arrSelectedRowsBuy.firstIndex(of: indexPath.row) {
cell.checkImg.image = UIImage(named: "checkbox_inactive")
arrSelectedRowsBuy.remove(at: index)
}
} else {
cell.checkImg.image = UIImage(named: "blue_tick")
arrSelectedRowsBuy.append(indexPath.row)
}
}
2条答案
按热度按时间fzsnzjdm1#
下面是一些可以在Playground中编译(但不能运行)的示例代码,Playground基于原始代码:
由于问题是如何在数组中存储数据模型id而不是行号,因此我简单地更改了代码来实现这一点(并删除了对
contains
的不必要调用,因为如果行号不存在,将无法找到索引):原始代码没有按行顺序保存
arrSelectedRowsBuy
,如果不需要这样做,那么使用Set
代替Array
会使代码更简洁、更高效:如果顺序很重要,那么可以使用
IndexSet
来存储行索引(是的,回到那个!),并使用computed属性来计算数据模型id:我还没有测试过这段代码,但它确实可以编译。当然,如果数据模型实际上不包含
indexPath.row
上的事件,这将崩溃。如果eventListData?.result?.events?
可选链沿着某个地方有nils,它将以神秘的方式失败。为什么数据模式充满了可选项是一个完全不同的问题。ejk8hzay2#
从给定的代码中理解你的问题有点困难,但是因为你说写一个答案,我试着给你一些例子。
如果你定义了一个数组并用你的json填充它,现在你有了一个有序数组,indexPath将等于你的JSON,不管ID是什么。所以“If语句”看起来是不必要的和多余的“if arrSelectedRowsBuy.contains(indexPath.row){”,因为你确信你的JSON中有当前元素。
所以你不应该搜索ID然后删除,假设你没有ID,你用JSON数组填充你的TableView,然后用户选择一个单元格(例如第三个),你从你的JSON中删除第三个。如果你关心ID的顺序,你需要在填充你的TableView之前对你的JSON进行排序。我不知道你的JSON结构是什么,所以我只是写了一个INT JSON来演示代码。