ページネータ API - iOS

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む5読むのに数分
  • Paginator クラスは、NowTableService を介したServiceNow テーブル API の呼び出しによって返されるレコードセットを反復処理するためのメソッドを提供します。これは、NowTableService paginator() メソッドによって返されるオブジェクトです。その環境外でこのメソッドを呼び出さないでください。

    表 : 1. プロパティ
    名前 タイプ 説明
    hasNext ブール フェッチする次のページがあるかどうかを示すフラグ。
    有効な値:
    • true:次のページが利用可能です。
    • false:次のページは利用できません。
    has前へ ブール フェッチする前のページがあるかどうかを示すフラグ。
    有効な値:
    • true:前のページが利用可能です。
    • false:前のページは利用できません。
    isBusy ブール Paginator オブジェクトがデータのフェッチでビジー状態かどうかを示すフラグ。
    有効な値:
    • true:パブリッシャーはビジー状態です。
    • false:パブリッシャーはビジー状態ではありません。
    isFinished ブール ページネーションオブジェクトが終了したかどうかを示すフラグ。ページネータが終了するように構成されている場合、ページネータオブジェクトのパブリッシャは最後のページがフェッチされたときに終了します。Paginator オブジェクトは、終了後にページをフェッチできません。詳細については、パラメーターの説明 publisherShouldFinish を参照してください。
    有効な値:
    • true:パブリッシャーは終了しています。
    • false:パブリッシャーは終了していません。
    itemsPerPage 整数 ページごとにフェッチするアイテムの数。

    デフォルト:20

    numberOfPages 整数 レコードセット内の合計ページ数

    Paginator オブジェクトがまだページをフェッチしていない場合、このパラメーターは Int.max に設定されます。インスタンスに対して ServiceNow 最初の要求が行われた後、ページ数はインスタンスから ServiceNow 受信した実際のページ数に更新されます。

    ページ 整数 ページネーションされたレコードセット内の現在のページ。
    publisher 文字列 ページ分割されたデータのストリームをサブスクライバーに提供するパブリッシャー。
    注:
    既定では、発行元は終了しません。この動作を変更するには、プロパティを true に設定しますpublisherShouldFinish
    publisherShouldFinish ブール 最後のページがフェッチされたときにページネーションオブジェクトのパブリッシャーを停止するかどうかを示すフラグ。Paginator オブジェクトは、終了後にページをフェッチできません。
    有効な値:
    • true:最後のページがフェッチされると、パブリッシャーは追加データの提供から解放されます。reset() メソッドは機能しなくなりました。
    • false:パブリッシャーが終了せず、ナビゲーションに関係なくすべてのメソッドが完全に動作します。

    デフォルト:false

    Paginator - first() throws

    返される結果の最初のページをフェッチします。

    このメソッドが最初のページをフェッチできない場合は、 PaginationError がスローされます。

    表 : 2. パラメーター
    名前 タイプ 説明
    なし
    表 : 3. 返される内容
    タイプ 説明
    なし

    次のコード例は、このメソッドを呼び出す方法を示しています。

    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

    返される結果の最後のページをフェッチします。

    このメソッドが最後のページをフェッチできない場合は、 PaginationError がスローされます。

    表 : 4. パラメーター
    名前 タイプ 説明
    なし
    表 : 5. 返される内容
    タイプ 説明
    なし

    次のコード例は、このメソッドを呼び出す方法を示しています。

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

    Paginator - next() throws

    返された結果の次のページをフェッチします。

    フェッチするページがなくなった場合、このメソッドは PaginationError をスローします。

    表 : 6. パラメーター
    名前 タイプ 説明
    なし
    表 : 7. 返される内容
    タイプ 説明
    なし

    次のコード例は、このメソッドを呼び出す方法を示しています。

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

    Paginator - previous() throws

    返された結果の前のページをフェッチします。

    メソッドが前のページをフェッチできない場合は、 PaginationError がスローされます。

    表 : 8. パラメーター
    名前 タイプ 説明
    なし
    表 : 9. 返される内容
    タイプ 説明
    なし

    次のコード例は、このメソッドを呼び出す方法を示しています。

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

    Paginator - reset()

    ページネータをリセットして最初のページに戻しますが、返された結果の最初のページは返されません。

    表 : 10. パラメーター
    名前 タイプ 説明
    なし
    表 : 11. 返される内容
    タイプ 説明
    なし

    次のコード例は、このメソッドを呼び出す方法を示しています。

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