Skip to content

Instantly share code, notes, and snippets.

@jimmythai
Last active April 21, 2019 12:40
Show Gist options
  • Save jimmythai/2a0891ff88ecffcda30f70a20ff3aa5e to your computer and use it in GitHub Desktop.
Save jimmythai/2a0891ff88ecffcda30f70a20ff3aa5e to your computer and use it in GitHub Desktop.
Use case: incremental search
extension DispatchQueue {
func debounce(delay: DispatchTimeInterval) -> (_ block: @escaping () -> Void) -> Void {
var lastFireTime: DispatchTime = .now()
return { [weak self, delay] block in
let deadline: DispatchTime = .now() + delay
lastFireTime = .now()
self?.asyncAfter(deadline: deadline) { [delay] in
let now: DispatchTime = .now()
let when = lastFireTime + delay
if now < when { return }
lastFireTime = .now()
block()
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment