Załóżmy, że mam aplikację do obsługi wiadomości błyskawicznych, która odtwarza dźwięk za każdym razem, gdy nadejdzie wiadomość. Chcę wydobywać sygnały dźwiękowe, ale chciałbym odtworzyć sygnał dźwiękowy dla pierwszej wiadomości, a nie dla następnych (w czasie, powiedzmy, 2 sekundy).RxSwift - Odbijanie/blokowanie "odwrotne"
Innym przykładem może być: moja aplikacja wysyła powiadomienia na klawiaturze (dzięki czemu użytkownik, z którym rozmawiam, widzi, że piszę wiadomość). Chcę wysłać powiadomienie na klawiaturze, gdy zacznę pisać, ale wysyłam nowe tylko w odstępach X-sekundowych, więc nie wysyłam powiadomień na klawiaturze dla każdego wpisanego przeze mnie znaku.
Czy to ma sens? Czy istnieje operator? Czy można to osiągnąć przy pomocy istniejących operatorów?
To jest mój kod dla pierwszego przykładu. Rozwiązuję go teraz pod numerem debounce
, ale nie jest idealny. Jeśli otrzymam 1000 wiadomości w odstępach co 1 sekundę, nie będzie odtwarzał dźwięku, dopóki nie nadejdzie ostatnia wiadomość (chciałbym odtworzyć dźwięk na pierwszym).
self.messagesHandler.messages
.asObservable()
.skip(1)
.debounce(2, scheduler: MainScheduler.instance)
.subscribeNext { [weak self] message in
self?.playMessageArrivedSound()
}.addDisposableTo(self.disposeBag)
Dzięki!
Jest to dobre wytłumaczenie https://medium.com/@dkhuong291/throttle-vs-debounce-in-rxswift-86f8b303d5d4 – onmyway133