]> git.r.bdr.sh - rbdr/map/blame - Map/Logic/Debouncer.swift
Address the lint warnings
[rbdr/map] / Map / Logic / Debouncer.swift
CommitLineData
be897af3 1// Copyright (C) 2024 Rubén Beltrán del Río
98f09799 2
be897af3
RBR
3// This program is free software: you can redistribute it and/or modify
4// it under the terms of the GNU General Public License as published by
5// the Free Software Foundation, either version 3 of the License, or
6// (at your option) any later version.
98f09799 7
be897af3
RBR
8// This program is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11// GNU General Public License for more details.
98f09799 12
be897af3
RBR
13// You should have received a copy of the GNU General Public License
14// along with this program. If not, see https://map.tranquil.systems.
77d0155b
RBR
15import Foundation
16
17class Debouncer {
18
19 // MARK: - Properties
75a0e450 20 private let queue = DispatchQueue.global(qos: .utility)
77d0155b
RBR
21 private var workItem = DispatchWorkItem(block: {})
22 private var interval: TimeInterval
23
24 // MARK: - Initializer
25 init(seconds: TimeInterval) {
26 self.interval = seconds
27 }
28
29 // MARK: - Debouncing function
30 func debounce(action: @escaping (() -> Void)) {
31 workItem.cancel()
32 workItem = DispatchWorkItem(block: { action() })
33 queue.asyncAfter(deadline: .now() + interval, execute: workItem)
34 }
35}