]>
Commit | Line | Data |
---|---|---|
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 |
15 | import Foundation |
16 | ||
17 | class 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 | } |