我试图根据优先级(枚举)重新排序单元格。我仔细检查过我的枚举值是否正确。这是我的枚举
enum Priority{
case low
case neutral
case high
case urgent
}
如您所见,优先级较低的哈希值较低。我想比较两个细胞;一个细胞和它上面的细胞。如果单元格的值大于其上方的值,它将向上移动。我使用
获取上面单元格的IndexPathvar newIndexPath = IndexPath(row: indexPath.row - 1 , section: indexPath.section)
使用
比较枚举值if(comparePriority.hashValue < priorityValue.hashValue)
我尝试使用
切换订单tableview.moveRow(at: indexPath, to: newIndexPath)
结果很有意思,我会用图片来解释。请注意,所有这些代码都在我的cellForRowAt
函数中,除了&#34; test&#34;之外,所有单元格都被赋予与其名称相对应的优先级,这些图片也是以慢动作拍摄的,这意味着用户无法真正看到切换发生。
答案 0 :(得分:2)
根据这些优先级对项目数组进行排序,然后重新加载表格。
通过这种方式,索引0
只是第一个项目等等,您将获得简单的代码,这些代码不会在整个地方进行分类/比较。
排序看起来像(在您enum
类型为Int
并将priorityValue
重命名为priority
后,我建议您这样做:< / p>
enum Priority: Int
{
case low = 0
case neutral = 1
case high = 2
case urgent = 3
}
items.sorted(by: { $0.priority < $1.priority })
答案 1 :(得分:0)
您最好明确地设置优先级值。
enum Priority: Int {
case low = 0
case neutral = 1
case high = 2
case urgent = 3
}
并将您的dataSource
数组排序为
dataSource = dataSource.sorted(by: { $0.priority < $1.priority })
tableView.reloadDate()