尽管我们可以访问List中的具体item,但是我们不知道List滚动到了当前哪个位置,也不知道我们到List末尾的距离。这些数据都是我们进行分页的基础。
Pagination(分页)对于每个人都有不同的含义,因此我们先给分页的目标做个明确定义:
在滚动过程中,List应提取并追加下一页的数据。当用户到达列表末尾且请求仍在进行中时,应显示加载视图。
基于上面的定义,让我们实现一个解决方案来解决这些问题,给List增加分页功能
实现
在此节中,我们将介绍两种不同的方案。第一种将更为简单,第二种将更为高级用户喜欢。
第一种方法
最简单的方法就是监测当前item是否是最后一个。如果是,我们则触发一个异步请求去提取下一页的数据。
RandomAccessCollection+isLastItem
由于List支持RandomAccessCollection,我们可以创建一个extension并实现isLastItem 函数。Self关键词是必须的,它将限制extension的元素必须实现Identifable。
好了,上面这段文字没有深入研究过swift的朋友肯定要懵圈了。大家可以参考我之前文章,简单了解一下RandomAccessCollection 和Identifiable
- SwiftUI RandomAccessCollection 是什么如何用(2020)
- SwiftUI 基础之06 Identifiable 有什么用
- SwiftUI guard 是什么如何用(2020教程)
下面是代码