在《SwiftUI 高級List分頁與無限滾動之基礎(chǔ)版(2020教程)》中我們介紹了List分頁的基礎(chǔ)實現(xiàn)方法项炼,但是這種方法沒有站在用戶的角度思考避诽,下面我們以用戶為中心制作分頁。
下面诊笤,我們將研究一下如何通過閾值控制獲取下一頁時間戴质。
RandomAccessCollection+isThresholdItem
這次钱磅,我們將從extentions的RandomAccessCollection開始乓土。這次宪潮,我們將實現(xiàn)一個名為isThresholdItem的函數(shù),該函數(shù)確定給定item是否為閾值item趣苏。
extension RandomAccessCollection where Self.Element: Identifiable {
func isThresholdItem<Item: Identifiable>(offset: Int,
item: Item) -> Bool {
guard !isEmpty else {
return false
}
guard let itemIndex = firstIndex(where: { AnyHashable($0.id) == AnyHashable(item.id) }) else {
return false
}
let distance = self.distance(from: itemIndex, to: endIndex)
let offset = offset < count ? offset : count - 1
return offset == (distance - 1)
}
}
此函數(shù)查找給定項目的索引狡相。如果找到,它將計算到終點索引的距離食磕。指定的偏移量(即尽棕,結(jié)束之前的項目數(shù))應(yīng)等于distance —1。我們必須從該距離中減去1彬伦,因為結(jié)束索引等于count屬性的值(即滔悉,集合中的當(dāng)前項目數(shù)) )伊诵。我還為偏移量添加了一個簡單的驗證檢查。偏移量應(yīng)小于集合中的當(dāng)前項目數(shù).
界面部分
UI實現(xiàn)與第一種方法中的UI幾乎相同回官。但是曹宴,有一個關(guān)鍵的區(qū)別,那就是listItemAppears函數(shù)
請記住孙乖,這里我們從第一種方法重用了isLastItem函數(shù)浙炼。僅當(dāng)用戶到達列表的末尾并且對下一頁的請求仍在進行中時份氧,才會顯示加載視圖