0
1

SwiftUIで追加読み込みをする方法

Posted at

はじめに

ListのViewにて、スクロールして最下部まで到達したら追加読み込みを行う方法です。

方法

struct ContentView: View {
  @State var numbers = Array(1...50)
  var body: some View {
    List {
      ForEach(Array(numbers.enumerated()), id: \.element) { index, element in
        Cell(index: index)
          .onAppear {
            if numbers.count - index == 1 {
              // 配列の中身を更新する処理
            }
          }
      }
      // 配列の中身を更新中はこの辺りでインジケーターを表示する
    }
  }
}

private struct Cell: View {
  let index: Int
  var body: some View {
    Text("No.\(index)")
  }
}

例の全体像はこんな感じです。

肝になってくるのは

ForEach(Array(numbers.enumerated()), id: \.element) { index, element in
...
}

この部分で配列のindexをenumerated()で取得して使用します。

ListではForEachでViewを繰り返し表示すると思いますが
ForEach内で表示しているViewのonAppear内で

if 配列の要素数 - 今表示されたViewのindex == 1 {
  // 何らかの処理
}

をすることでスクロールで最下部に到達した時に追加読み込みの処理を呼び出すことができます。

最後に

コード量から見てもかなり簡単にできることが分かります(View側に関しては)
他にも色々と方法はありそうですが、今回はこの方法を紹介しました。
最近インデントは半角スペース2つ派になりました。
以上です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1