---
sourceDocument: Xanadu API Reference
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - en-US

ft:publication_title :

    - Xanadu API Reference

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# Paginator API - iOS

# Paginator API - iOS {#ariaid-title1}

* Release version: Xanadu
* 
* Updated August 1, 2024
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 3 minutes to read

The Paginator class provides methods for iterating through a record
set returned by a call to the ServiceNow
Table API through the NowTableService. It is the object that is returned by
the NowTableService paginator() methods. Do not call this method outside of
that environment.
{#PaginatorIOSAPI__table_vx2_klw_5pb__entry__3}

| Name | Type | Description |
|-|-|-|
| hasNext | Boolean | Flag that indicates whether there is a next page to fetch. Valid values: * true: Next page is available. * false: Next page is not available. |
| hasPrevious | Boolean | Flag that indicates whether there is a previous page to fetch. Valid values: * true: Previous page is available. * false: Previous page is not available. |
| isBusy | Boolean | Flag that indicates whether the Paginator object is busy fetching data. Valid values: * true: Publisher is busy. * false: Publisher is not busy. |
| isFinished | Boolean | Flag that indicates whether the Paginator object is finished. When the paginator is configured to finish, the Paginator object's publisher finishes when the last page has been fetched. A Paginator object cannot fetch any pages after it finishes. For additional information, see the description of the publisherShouldFinish parameter. Valid values: * true: Publisher is finished. * false: Publisher is not finished. |
| itemsPerPage | Integer | Number of items to fetch per page. Default: 20 |
| numberOfPages | Integer | Total number of pages within the record set. When the Paginator object has not yet fetched any pages, this parameter is set to `Int.max`. After an initial request has been made to the ServiceNow instance, the number of pages is updated to the actual number of pages received from the ServiceNow instance. |
| page | Integer | Current page within the paginated record set. |
| publisher | String | Publisher that supplies the stream of paginated data to the subscribers. Note: By default, the publisher does not finish. To change this behaviour, set the publisherShouldFinish property to `true`. |
| publisherShouldFinish | Boolean | Flag that indicates whether to stop the Paginator object's publisher when the last page has been fetched. A Paginator object cannot fetch any pages after it finishes. Valid values: * true: Once the last page is fetched, the publisher is released from providing additional data. The reset() method is no longer functional. * false: The publisher is never finished and all methods are fully operational regardless of navigation. Default: false |
[Table 1. Properties]

{#PaginatorIOSAPI__table_vx2_klw_5pb}

## Paginator - first() throws {#ariaid-title2}

Fetches the first page of the return results.
If this method can't fetch the first page, it throws a `PaginationError`.
{#Paginator-first__table_fpc_bgv_kqb__entry__3}

| Name | Type | Description |
|-|-|-|
| None |   |   |
[Table 2. Parameters]

{#Paginator-first__table_fpc_bgv_kqb} {#Paginator-first__table_gpc_bgv_kqb__entry__2}

| Type | Description |
|-|-|
| None |   |
[Table 3. Returns]

{#Paginator-first__table_gpc_bgv_kqb}  
The following code example shows how to call this method.

    class PaginatorTestViewModel<T: JSONRepresentable>: ObservableObject {
      @Published var result: Result<String, Error>?
      private let paginator: Paginator<T>
      private var subscriptions = Set<AnyCancellable>()

      init(paginator: Paginator<T>) {
        self.paginator = paginator
        subscribeToPaginator()
      }

      private func subscribeToPaginator() {
        paginator.publisher
          .receive(on: DispatchQueue.main)
          .sink { [weak self] comp in
            if case .failure(let error) = comp {
              self?.result = .failure(error)
            }
          } receiveValue: { [weak self] jsonRepresentable in
            self?.result = .success(jsonRepresentable.jsonDescription)
          }
          .store(in: &subscriptions)
      }

      func first() {
        result = nil
        do {
          try paginator.first()
        } catch {
          self.result = .failure(error)
        }
      }
    }

## Paginator - last() throws {#ariaid-title3}

Fetches the last page of the return results.
If this method can't fetch the last page, it throws a `PaginationError`.
{#Paginator-last__table_ipy_hgv_kqb__entry__3}

| Name | Type | Description |
|-|-|-|
| None |   |   |
[Table 4. Parameters]

{#Paginator-last__table_ipy_hgv_kqb} {#Paginator-last__table_jpy_hgv_kqb__entry__2}

| Type | Description |
|-|-|
| None |   |
[Table 5. Returns]

{#Paginator-last__table_jpy_hgv_kqb}  
The following code example shows how to call this method.

    ...
    func last() {
      result = nil
      do {
        try paginator.last()
      } catch {
        self.result = .failure(error)
      }
    }
    ...

## Paginator - next() throws {#ariaid-title4}

Fetches the next page of the return results.
If there are no more pages to fetch, the method throws a `PaginationError`.
{#Paginator-next__table_kj5_5cv_kqb__entry__3}

| Name | Type | Description |
|-|-|-|
| None |   |   |
[Table 6. Parameters]

{#Paginator-next__table_kj5_5cv_kqb} {#Paginator-next__table_lj5_5cv_kqb__entry__2}

| Type | Description |
|-|-|
| None |   |
[Table 7. Returns]

{#Paginator-next__table_lj5_5cv_kqb}  
The following code example shows how to call this method.

    ...
    func next() {
      result = nil
      do {
        try paginator.next()
      } catch {
        self.result = .failure(error)
      }
    }
    ...

## Paginator - previous() throws {#ariaid-title5}

Fetches the previous page of the return results.
If the method can't fetch the previous page, it throws a `PaginationError`.
{#Paginator-previous__table_lby_sfv_kqb__entry__3}

| Name | Type | Description |
|-|-|-|
| None |   |   |
[Table 8. Parameters]

{#Paginator-previous__table_lby_sfv_kqb} {#Paginator-previous__table_mby_sfv_kqb__entry__2}

| Type | Description |
|-|-|
| None |   |
[Table 9. Returns]

{#Paginator-previous__table_mby_sfv_kqb}  
The following code example shows how to call this method.

    ...
    func previous() {
      result = nil
      do {
        try paginator.previous()
      } catch {
        self.result = .failure(error)
      }
    }
    ...

## Paginator - reset() {#ariaid-title6}

Resets the Paginator back to the first page but doesn't return the first page of the return results.
{#Paginator-reset__table_u1y_mgv_kqb__entry__3}

| Name | Type | Description |
|-|-|-|
| None |   |   |
[Table 10. Parameters]

{#Paginator-reset__table_u1y_mgv_kqb} {#Paginator-reset__table_v1y_mgv_kqb__entry__2}

| Type | Description |
|-|-|
| None |   |
[Table 11. Returns]

{#Paginator-reset__table_v1y_mgv_kqb}  
The following code example shows how to call this method.

    ...
    func reset() {
      result = nil
      paginator.reset()
    }
    ...


