【SwiftUI】List の一番下までスクロールしたかチェックする方法(追加読み込み)

List の一番下までスクロールしたかチェックする方法(追加読み込み)

大量のデータを一気に読み込まないで、20〜30件を分割して読み込んでいく場合、スクロールの終端到達をチェックする必要があります

UIKit の UITableView の場合は cellForRow(at indexPath: IndexPath)indexPath.row最後のデータ行であるかどうか、などで判定していたと思います。

SwiftUI の List では以下のようにすればチェックすることができます。

List {
    ForEach(users) { user in
        RowView(User: user)
            .onAppear() {
                if user.id == users.last?.id {
                    addLoad()
                }
            }
    }
}

ForEach の users は仮に User というデータクラスの配列で、List の行は RowView という View が予め定義されているものと仮定します。

上記例では、RowView が表示された時、すなわち onAppear() がコールされた時に、その RowView に表示する User の id が配列最後の要素の id と一致するなら最終行が表示された、という判定を行っています。

このタイミングで追加の読み込み処理を行うと良いでしょう。

以上