iWh*_*Buy 6 throttling frp swift debounce combine
我被Throttle出版商困住了。我不明白它选择间隔的方式。Debounce发布者更容易理解,它在每个发布的值之后选择一个间隔,并检查在该间隔内是否发布了新值。我Throttle什至从 Apple看到了一些例子,但它们非常非常简单。
假设我们有一些上游产生值,并且我们知道所有值是何时产生的 ( input: [Time])。Throttle发布者使用这些值,限制它们并在其他时间产生值 ( output: [Time])。有没有办法编写一个产生正确预期的函数output?
func output<Time>(interval: Time, input: [Time]) -> [Time] {
//
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我相信latest参数在选择间隔时没有任何作用,是吗?我相信它只是从提供的间隔中选择值。
节流阀可能是一个很难理解的野兽。该参数确实latest会产生影响,具体取决于接收到的未来值的时间 - 它控制在节流超时期间接收到的那些值(第一个或最后一个)在到期时传播。
在至少收到一个值之前,Throttle 不会真正开始“参与”延迟或取消进一步的值。一旦发生这种情况,您可以将其视为“启动计时器”。让我们使用持续时间为 1 秒的节流示例。启动油门接合的第一个值始终会被传递。之后的值受油门影响。
当油门开始接合时,仅在 1 秒的持续时间结束后才会传播更多值。如果在“超时”窗口期间传播了多个值,则参数“latest”会选择在节流计时器到期并重置下一系列值时存储哪些属性并沿着发布链传播。latest为 true 意味着给我在节流计时器到期之前传播的最后一个值。
https://heckj.github.io/swiftui-notes/#reference-throttle上的时间线图表对此给出了一些意义,尽管在实践中我自己并没有发现自己需要在最新与否之间进行选择,尽管我怀疑在某些用例中它是至关重要的。
如果您正在寻找只是“减慢”流量但保留所有值的东西,那么这不是您想要的 - 它会降低值以启用节流阀。
| 归档时间: |
|
| 查看次数: |
1043 次 |
| 最近记录: |