大佬教程收集整理的这篇文章主要介绍了使用组合框架向 UIViewController 添加分页以实现无限滚动,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一些 API 调用来检索给定页面的项目列表:
func getItemsA(_ page: @R_618_10185@ -> AnyPublisher<[A],Never>
func getItemsB(_ page: @R_618_10185@ -> AnyPublisher<[B],Never>
// (and morE)
我想创建一个具有无限滚动(第 1 - 10 页、第 2 - 20 个项目等)的通用 UIVIEwController
,它需要一个
(@R_618_10185@->AnyPublisher<[T],Never>
闭包并在内部做尽可能多的工作(对外界隐藏)
目前我所拥有的@R_607_9811@(再次,我简化了代码以突出显示重要部分)
// PagedCollectionVIEwController.swift
class PagedCollectionVIEwController<T>: UIVIEwController,UICollectionVIEwDelegate {
@Published var items: [T] = []
private var subscriptions = Set<AnyCancellable>()
var getItems: ((@R_618_10185@ -> AnyPublisher<[T],Never>)?
// (...)
overrIDe func vIEwDIDLoad() {
super.vIEwDIDLoad()
$items.sink { _ in
self.collectionVIEw.reloadData()
}.store(in: &subscriptions)
// get the items on the initial call
getItems?(currentPagE).sink { newItems in
self.items.append(contentsOf: newItems)
}.store(in: &subscriptions)
}
// (...)
func collectionVIEw(_ collectionVIEw: UICollectionVIEw,willdisplay cell: UICollectionVIEwCell,forItemAt indexPath: IndexPath) {
let itemsCount = collectionVIEw
.numberOfItems(inSection: indexPath.section)
// everytime the user reaches the end of the List we need to load more items
if indexPath.row == itemsCount - 1 {
getItems?(currentPagE).sink { newItems in
self.items.append(contentsOf: newItems)
}.store(in: &subscriptions)
}
}
}
// HomeVIEwController.swift
final class HomeVIEwController: PagedCollectionVIEwController<A> {
(...)
overrIDe func loadVIEw() {
super.loadVIEw()
collectionVIEw.datasource = self
getItems = interactor?.getItemsA
}
}
所以我最感兴趣的是 getItems
的 PagedCollectionVIEwController
部分。我是 Combine 的新手,我发现 sink
方法在 getItems
上被调用两次有点奇怪。有没有更好的方法?
PagedCollectionVIEwController
将与许多其他控制器一起使用,我希望它在任何地方都能以同样的方式工作,这就是为什么我希望它尽可能通用。你有什么建议如何改进它吗?也许对这个确切的部分(加载更多项目)使用组合通常是一个坏主意?你会以不同的方式解决分页问题吗?
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的使用组合框架向 UIViewController 添加分页以实现无限滚动全部内容,希望文章能够帮你解决使用组合框架向 UIViewController 添加分页以实现无限滚动所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。