我是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
}
答案 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 {...}
内执行此操作,因为它经常被调用。这样做效率极低。