程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用组合框架向 UIViewController 添加分页以实现无限滚动大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用组合框架向 UIViewController 添加分页以实现无限滚动?

开发过程中遇到使用组合框架向 UIViewController 添加分页以实现无限滚动的问题如何解决?下面主要结合日常开发的经验,给出你关于使用组合框架向 UIViewController 添加分页以实现无限滚动的解决方法建议,希望对你解决使用组合框架向 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
    }
}

所以我最感兴趣的是 getItemsPagedCollectionVIEwController 部分。我是 Combine 的新手,我发现 sink 方法在 getItems 上被调用两次有点奇怪。有没有更好的方法?

PagedCollectionVIEwController 将与许多其他控制器一起使用,我希望它在任何地方都能以同样的方式工作,这就是为什么我希望它尽可能通用。你有什么建议如何改进它吗?也许对这个确切的部分(加载更多项目)使用组合通常是一个坏主意?你会以不同的方式解决分页问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的使用组合框架向 UIViewController 添加分页以实现无限滚动全部内容,希望文章能够帮你解决使用组合框架向 UIViewController 添加分页以实现无限滚动所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。