Перемещение массива нижних элементов вверх: ошибка индекса вне диапазона - PullRequest
1 голос
/ 06 октября 2019

Я пытаюсь переместить нижний пост в моем массиве постов в верхнюю часть моего массива постов. Я создал следующий код:

    self.posts.insert(contentsOf: tempPosts, at: 0)
    let element = self.posts.remove(at: tempPosts.endIndex)
    self.posts.insert(element, at: 0)
    let newIndexPaths = (0..<tempPosts.count).map { i in
            return IndexPath(row: i, section: 0)
        }

Этот код выдает ошибку: Индекс вне диапазона для второй строки фрагмента кода.

Я пробовал тот же код для движущихся элементов, ноЯ заменил tempPosts.endIndex на tempPosts.endIndex - 1. Это работает для перемещения второго к последнему сообщению в массиве наверх. Но когда я изменяю код обратно на tempPosts.endIndex, он не будет перемещать нижнюю запись в верхнюю часть массива.

Я попытался добавить оператор if:

 if self.posts.count > 2 {
        let element = self.posts.remove(at: tempPosts.endIndex)
        self.posts.insert(element, at: 0)
        }

Но я получил ту же фатальную ошибку.

Что не так в моем коде и как я могу его устранить

1 Ответ

1 голос
/ 06 октября 2019

Если ваше намерение состоит в том, чтобы переместить последний элемент вашей коллекции в начало, вы можете вставить получившийся элемент, возвращенный методом removeLast. Только не вызывайте этот метод, если массив пуст:

posts.insert(posts.removeLast(), at: 0)

Вы также можете расширить RangeReplaceableCollection и создать собственный метод следующим образом:

extension RangeReplaceableCollection where Self: BidirectionalCollection {
    mutating func moveLastElementToFirst() {
        insert(removeLast(), at: startIndex)
    }
}

var test = [2,3,4,5,6,7,8,9,1]
test.moveLastElementToFirst()
test  // [1, 2, 3, 4, 5, 6, 7, 8, 9]

var string = "234567891"
string.moveLastElementToFirst()
string  //  "123456789"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...