gpt4 book ai didi

ios - RxSwift - 去抖/节流 "inverse"

转载 作者:IT王子 更新时间:2023-10-29 05:11:17 27 4
gpt4 key购买 nike

假设我有一个即时消息应用程序,每次收到消息时它都会发出哔声。我想 debounce 哔哔声,但我想在第一条消息到达时播放哔哔声,而不是为后续消息播放(在时间跨度内,比如 2 秒)。

另一个示例可能是:我的应用程序发送输入通知(因此与我聊天的用户可以看到我正在输入消息)。我想在开始输入时发送输入通知,但仅以 X 秒为间隔发送新通知,因此我不会为输入的每个字符发送输入通知。

这有意义吗?有运营商吗?现有运营商能否实现?

这是我的第一个例子的代码。我现在正在使用 debounce 解决它,但这并不理想。如果我在 1 秒的间隔内收到 1000 条消息,它不会播放声音直到最后一条消息到达(我想在第一条消息上播放声音)。

self.messagesHandler.messages
.asObservable()
.skip(1)
.debounce(2, scheduler: MainScheduler.instance)
.subscribeNext { [weak self] message in
self?.playMessageArrivedSound()
}.addDisposableTo(self.disposeBag)

谢谢!

最佳答案

针对 RxSwift 3 进行了更新并改进了 throttle运营商

新行为 throttle运算符,在 RxSwift 3.0.0-beta.1 中引入,您可以像这样使用它:

    downloadButton.rx.tap
.throttle(3, latest: false, scheduler: MainScheduler.instance)
.subscribe(onNext: { _ in
NSLog("tap")
}).addDisposableTo(bag)

旧版答案

使用 window运算符,然后转换 Observable<Observable<Type>>Observable使用 flatMap .

此示例代码仅在每 3 秒窗口中的第一次点击时打印“点击”(或者如果点击次数超过 10000)。

    downloadButton.rx_tap
.window(timeSpan: 3, count: 10000, scheduler: MainScheduler.instance)
.flatMap({ observable -> Observable<Void> in
return observable.take(1)
})
.subscribeNext { _ in
NSLog("tap")
}.addDisposableTo(bag)

关于ios - RxSwift - 去抖/节流 "inverse",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35438268/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com