Paginator API - iOS

  • Release version: Zurich
  • Updated July 31, 2025
  • 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.

    Table 1. Properties
    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

    Paginator - first() throws

    Fetches the first page of the return results.

    If this method can't fetch the first page, it throws a PaginationError.

    Table 2. Parameters
    Name Type Description
    None
    Table 3. Returns
    Type Description
    None

    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

    Fetches the last page of the return results.

    If this method can't fetch the last page, it throws a PaginationError.

    Table 4. Parameters
    Name Type Description
    None
    Table 5. Returns
    Type Description
    None

    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

    Fetches the next page of the return results.

    If there are no more pages to fetch, the method throws a PaginationError.

    Table 6. Parameters
    Name Type Description
    None
    Table 7. Returns
    Type Description
    None

    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

    Fetches the previous page of the return results.

    If the method can't fetch the previous page, it throws a PaginationError.

    Table 8. Parameters
    Name Type Description
    None
    Table 9. Returns
    Type Description
    None

    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()

    Resets the Paginator back to the first page but doesn't return the first page of the return results.

    Table 10. Parameters
    Name Type Description
    None
    Table 11. Returns
    Type Description
    None

    The following code example shows how to call this method.

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