Diciamo che ho un'applicazione di messaggistica istantanea che riproduce un segnale acustico ogni volta che arriva un messaggio. Voglio fare il debounce
bip, ma mi piacerebbe suonare il segnale acustico per il primo messaggio arrivato e non per i seguenti (in un intervallo di, diciamo, 2 secondi).RxSwift - Debounce/Throttle "inversa"
Un altro esempio potrebbe essere: la mia applicazione invia a digitare le notifiche (in modo che l'utente che sto chiacchierando con può vedere che sto scrivendo un messaggio). Voglio inviare una notifica di digitazione quando comincio a digitare, ma invio solo nuovi in intervalli di X secondi, quindi non invio una notifica di digitazione per ogni carattere che digito.
Ha senso? C'è un operatore per questo? Potrebbe essere raggiunto con gli operatori esistenti?
Questo è il mio codice per il primo esempio. Sto risolvendolo ora con debounce
, ma non è l'ideale. Se ricevo 1000 messaggi in intervalli di 1 secondo, non suonerà il suono fino a quando non arriva l'ultimo messaggio (mi piacerebbe suonare il suono sul primo).
self.messagesHandler.messages
.asObservable()
.skip(1)
.debounce(2, scheduler: MainScheduler.instance)
.subscribeNext { [weak self] message in
self?.playMessageArrivedSound()
}.addDisposableTo(self.disposeBag)
Grazie!
Questa è una buona spiegazione https://medium.com/@dkhuong291/throttle-vs-debounce-in-rxswift-86f8b303d5d4 – onmyway133