盡管我們可以訪問List中的具體item,但是我們不知道List滾動(dòng)到了當(dāng)前哪個(gè)位置,也不知道我們到List末尾的距離谒拴。這些數(shù)據(jù)都是我們進(jìn)行分頁的基礎(chǔ)。
Pagination(分頁)對(duì)于每個(gè)人都有不同的含義跃捣,因此我們先給分頁的目標(biāo)做個(gè)明確定義:
在滾動(dòng)過程中枷颊,List應(yīng)提取并追加下一頁的數(shù)據(jù)。當(dāng)用戶到達(dá)列表末尾且請求仍在進(jìn)行中時(shí)艾少,應(yīng)顯示加載視圖卡乾。
基于上面的定義,讓我們實(shí)現(xiàn)一個(gè)解決方案來解決這些問題缚够,給List增加分頁功能
實(shí)現(xiàn)
在此節(jié)中幔妨,我們將介紹兩種不同的方案。第一種將更為簡單谍椅,第二種將更為高級(jí)用戶喜歡误堡。
第一種方法
最簡單的方法就是監(jiān)測當(dāng)前item是否是最后一個(gè)。如果是雏吭,我們則觸發(fā)一個(gè)異步請求去提取下一頁的數(shù)據(jù)锁施。
RandomAccessCollection+isLastItem
由于List支持RandomAccessCollection,我們可以創(chuàng)建一個(gè)extension并實(shí)現(xiàn)isLastItem 函數(shù)。Self關(guān)鍵詞是必須的杖们,它將限制extension的元素必須實(shí)現(xiàn)Identifable悉抵。
好了,上面這段文字沒有深入研究過swift的朋友肯定要懵圈了摘完。大家可以參考我之前文章姥饰,簡單了解一下RandomAccessCollection 和Identifiable
- SwiftUI RandomAccessCollection 是什么如何用(2020)
- SwiftUI 基礎(chǔ)之06 Identifiable 有什么用
- SwiftUI guard 是什么如何用(2020教程)
下面是代碼