Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxSwift throttle()以获取第一个元素_Swift_Rx Swift_Reactivex - Fatal编程技术网

RxSwift throttle()以获取第一个元素

RxSwift throttle()以获取第一个元素,swift,rx-swift,reactivex,Swift,Rx Swift,Reactivex,我正在寻找一种方法,使throttle()操作符在给定的时间间隔内放弃可观察的中的第一个元素,而不是最后一个元素 一个类似的问题已经被问到(并得到了回答),但这些答案中有一个不完美的地方,我想避免。也就是说,在理想情况下,将获得可观测中发射的第一个元素,并在时间间隔期间忽略任何未来元素。但是,当使用window()或timer()时,可能有两个元素在给定的时间间隔内进行,因为计时器恰好与throttle()调用的开始时间不平行。例如: |..........|..........|.......

我正在寻找一种方法,使
throttle()
操作符在给定的时间间隔内放弃
可观察的
中的第一个元素,而不是最后一个元素

一个类似的问题已经被问到(并得到了回答),但这些答案中有一个不完美的地方,我想避免。也就是说,在理想情况下,将获得
可观测
中发射的第一个元素,并在时间间隔期间忽略任何未来元素。但是,当使用
window()
timer()
时,可能有两个元素在给定的时间间隔内进行,因为计时器恰好与
throttle()
调用的开始时间不平行。例如:

|..........|..........|..........|
                    ^   ^
                first   second
它们落入不同的窗口,因此都被链接答案中描述的不完美解决方案所接受

理想情况下,有一种方法可以在窗口中的第一个元素出现时立即重新启动计时器,因此上面的示例将类似于:

|..........|.......|..........|
                    ^   ^
                first   second (ignored)
有什么想法吗


编辑:我不确定RxSwift 3.0-beta1的throttle()变体是如何处理这一问题的,但我正在寻找RxSwift 2.x实现的解决方案。

事实证明,RxSwift 3.0以我所希望的方式处理
throttle()
。它接受一个元素,然后在x秒内忽略任何其他元素(没有我在问题中提到的“窗口问题”)


为了完整性:
debounce()
仍然按照rxSwift的“旧”节流定义工作。也就是说,它采用一个时间间隔内的最后一项。

事实证明,rxSwift 3.0以我所希望的方式处理
throttle()
。它接受一个元素,然后在x秒内忽略任何其他元素(没有我在问题中提到的“窗口问题”)

为了完整性:
debounce()
仍然按照rxSwift的“旧”节流定义工作。也就是说,它采用时间间隔中的最后一项