Swift - печать массива в табличном представлении по убыванию - PullRequest
1 голос
/ 22 апреля 2019

Я новичок в 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 ]

2 голосов
/ 23 апреля 2019

Вы можете использовать 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), поэтому производительность будет плохой , Лучше всего просто повернуть назад в начале.

0 голосов
/ 22 апреля 2019

Это не обязательно самый эффективный способ сделать это, но, не видя остальную часть кода, он должен заставить вас двигаться вперед:

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 {...}, потому что он вызывается так часто. Это было бы крайне неэффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...