我正在try 实现分页.每当表格视图滚动时,我希望react 堆判断它是否到达底部.但是,无论什么时候发生tableView‘S didScroll,绑定reactor.action似乎都是没有必要的.

所以我觉得还是用一个运算符来限制绑定reactor.action比较好.但我不确定在这种情况下,.debounce.throttle之间哪个运营商更合适.

self.tableView.rx.didScroll
    .skip(1)
    .withLatestFrom(self.tableView.rx.contentOffset)
    .map { [weak self] in
        print("didScroll")
        
        return Reactor.Action.pagination(
            contentHeight: self?.tableView.contentSize.height ?? 0,
            contentOffsetY: $0.y,
            scrollViewHeight: UIScreen.main.bounds.height
        )
    }
    .bind(to: reactor.action)
    .disposed(by: disposeBag)

我已经在我的代码中try 了.debounce.throttle.但我仍然不确定哪一种更合适.

推荐答案

就我个人而言,我总是使用RxSwiftExt中提供的reachedBottom(offset:)方法.

也就是说,关于这个问题的答案...

  • debounce操作符用于输入抖动,您想要等到它稳定下来才读出输入.

  • 运算符throttle用于当输入不断发出,并且您希望将流减慢到可管理的数字时.

  • 当输出总是相同的值(例如,())并且您想要立即做出react 时,您也可以使用throttle.在本例中,您希望确保将latest设置为False.

我假设您在这里想要的是等待用户停止滚动,然后判断Content Offset的y(根据上面的描述,您应该已经知道要使用哪一个了).

在本例中使用debounce.

Swift相关问答推荐

OBJC代码中Swift 演员的伊瓦尔:原子还是非原子?

如何让ScrollView缩小到合适的大小,并在没有黑客攻击的情况下占用最小空间

如何将函数参数(字符串文字)标记为可本地化?

从文字创建数组时的 Swift 宏

是否可以使用 .task 修饰符更新基于两个值的视图

如何在类中打印函数

如何删除 macOS 中的所有命令?

并发执行代码中捕获的 var 的变异

供应和普通数组中具有空值的 map 函数的行为不一致?

与 SwiftUI 中的 onChange 修饰符相比,objectWillChangeSequence 的目的是什么?

持久化字符串列表属性 RealmSwift

使 Swift 并发中的任务串行运行

在 Select 器上显示alert Select SwiftUI

异步等待不会在项目中触发,但在 Xcode playground 中工作正常

在 xcode 13 中的构建之间保持可访问性权限

iOS 判断应用程序是否可以访问麦克风

使用 phimagemanager 将图像保存到自定义相册?

自动布局:获取 UIImageView 高度以正确计算单元格高度

自定义 MKAnnotation 标注视图?

ISO8601DateFormatter 不解析 ISO 日期字符串