Что такое пагинация в контексте разработки приложений?

«Что такое пагинация в контексте разработки приложений?» — вопрос из категории Сети, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Пагинация — это метод разбиения большого набора данных на отдельные страницы (части) для их последовательной загрузки и отображения.

Зачем это нужно?

  • Оптимизация производительности: Загрузка всех данных сразу потребляет много памяти и времени.
  • Улучшение UX: Пользователь видит первую часть контента мгновенно, а остальное подгружается по мере необходимости (например, при скролле).
  • Снижение нагрузки на сервер и сеть: Передаются только запрошенные порции данных.

Типичная реализация на iOS (UICollectionView/UITableView):

class ViewController: UIViewController {
    var data: [Item] = []
    var currentPage = 1
    var isLoading = false
    var isLastPage = false

    func loadNextPage() {
        guard !isLoading && !isLastPage else { return }
        isLoading = true
        // Показать индикатор загрузки

        NetworkService.fetchPage(currentPage) { [weak self] result in
            guard let self = self else { return }
            self.isLoading = false
            // Скрыть индикатор загрузки

            switch result {
            case .success(let newItems):
                if newItems.isEmpty {
                    self.isLastPage = true
                } else {
                    self.data.append(contentsOf: newItems)
                    self.currentPage += 1
                    self.tableView.reloadData()
                }
            case .failure(let error):
                // Обработать ошибку
                print(error)
            }
        }
    }
}

// Триггер подгрузки при достижении конца списка
extension ViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        if indexPath.row == data.count - 1 {
            loadNextPage()
        }
    }
}

Ключевые состояния для обработки: loading, error, last page reached. На сервере пагинация часто реализуется через параметры запроса ?page=1&limit=20 или курсоры (cursor).