Skip to content

Instantly share code, notes, and snippets.

@jimmythai
Created April 21, 2019 12:46
Show Gist options
  • Save jimmythai/70a5fddda6c834639f40a740e9aba901 to your computer and use it in GitHub Desktop.
Save jimmythai/70a5fddda6c834639f40a740e9aba901 to your computer and use it in GitHub Desktop.
class Debouncer {
private let delay: DispatchTimeInterval
private let queue: DispatchQueue
private var previousFiredTime: DispatchTime = .now()
init(delay: DispatchTimeInterval, queue: DispatchQueue = .main) {
self.delay = delay
self.queue = queue
}
func throttle(_ block: @escaping () -> Void) -> Void {
previousFiredTime = .now()
queue.asyncAfter(deadline: .now() + delay) { [weak self, delay] in
guard let self = self else { return }
let minimumDelay = self.previousFiredTime + delay
if .now() < minimumDelay { return }
self.previousFiredTime = .now()
block()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment