はじめに
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つ派になりました。
以上です。