SwiftUI List 判斷滑動到最後一筆

· 1min
Table of Contents

前言

使用 UITableView 或是 UICollectionView, 常使用 willDisplay cell 來判斷是否滑動到最後一筆,
ex:

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    let count = dataSource.snapshot().numberOfItems
    
    if indexPath.item == count - 1, viewModel.hasNextPage {
        viewModel.doAction(.loadNextPage)
    }
}

SwiftUI List 要如何實作?

實作

  1. 在 ForEach 找出 index
  2. 在 View.onAppear 加入判斷
List {
    // 1. 使用 array.indices 找出 index
    ForEach(viewModel.datas.indices, id: \.self) { index in
        let data = viewModel.datas[index]
        cell(data: data)
        .onAppear { // 2. 判斷 index 是否為最後一筆
            if index == viewModel.datas.count - 1 && viewModel.hasNextPage {
                viewModel.doAction(.loadNextPage)
            }
        }
    }
}