Swift-在表格视图上打印数组降序

时间:2019-04-22 20:23:57

标签: ios swift uitableview

我是Swift的新手,目前正在尝试在表视图中打印数组。该代码可以正常工作,但它以升序打印(第一个单元格为索引0)。有没有办法以降序打印(第一个单元格应该是最后一个索引)?

如果我错了,请纠正我,但我认为这是负责该表的代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let gefahren = gefahreneKm[indexPath.row]
        let dateFinal = date[indexPath.row]

        let cell = tableView.dequeueReusableCell(withIdentifier: "TimelineCell") as! TimelineCell

        cell.setDrivenKm(gefahreneKm: gefahren)
        cell.setDate(date: dateFinal)

        return cell
    }

2 个答案:

答案 0 :(得分:2)

您可以使用阵列的reversed版。

let gefahren = gefahreneKm.reversed()[indexPath.row]
let dateFinal = date.reversed()[indexPath.row]

不过,我不一定建议这样做。首次创建数组时,可能应该反转数组。要么创建一个辅助函数,以通过索引路径获取值,以使您在某个时候不会忘记反转数组。

func gefahren(at indexPath: IndexPath) -> Gefahren {
    return gefahreneKm.reversed()[indexPath.row]
}

不利之处在于,在这种情况下,reversed()实际上会创建一个新的反向数组,而不是退还给您ReversedCollection(因为Int无法对其进行索引) ,因此性能会很差。最好刚开始时要扭转。

答案 1 :(得分:0)

这不一定是执行此操作的最有效方法,但是如果不看其余代码,它将为您带来帮助:

let gefahreneKmIndex = gefahreneKm.count - 1 - indexPath.row
let dateFinalIndex = date.count - 1 - indexPath.row

let gefahren - gefahreneKm[gefahreneKmIndex]
let dateFinal = date[dateFinalIndex]

或者,您可以忘记上面包含的代码,而只要使用Swift内置的reversed()方法在设置数组内容的地方将数组反转即可。这是一个基本示例:

let arr = Array([0, 1 ,2 ,3].reversed()) // This will be ordered as [3, 2, 1, 0]

您会要在func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {...}内执行此操作,因为它经常被调用。这样做效率极低。