aboutsummaryrefslogtreecommitdiff
path: root/Map/Logic/Debouncer.swift
blob: cd7960a8fd18322e02f3e9b4788bdaee6a563fcd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import Foundation

class Debouncer {

  // MARK: - Properties
  private let queue = DispatchQueue.global(qos: .utility)
  private var workItem = DispatchWorkItem(block: {})
  private var interval: TimeInterval

  // MARK: - Initializer
  init(seconds: TimeInterval) {
    self.interval = seconds
  }

  // MARK: - Debouncing function
  func debounce(action: @escaping (() -> Void)) {
    workItem.cancel()
    workItem = DispatchWorkItem(block: { action() })
    queue.asyncAfter(deadline: .now() + interval, execute: workItem)
  }
}