-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathThreadSafeManager.swift
More file actions
43 lines (32 loc) · 1.05 KB
/
Copy pathThreadSafeManager.swift
File metadata and controls
43 lines (32 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import Foundation
final class ThreadSafeManager {
static let shared = ThreadSafeManager()
private var values: [String: Any] {
var valuesCopy: [String: Any]!
concurrentQueue.sync {
valuesCopy = self.unsafeValues
}
return valuesCopy
}
private var unsafeValues: [String: Any] = [String: Any]()
private let concurrentQueue = DispatchQueue(label: "com.martinprusa.threadSafeManagerQueue", attributes: .concurrent)
func add(value: String, identifier: String) {
concurrentQueue.async(flags: .barrier) { [weak self] in
guard let self = self else {
return
}
self.unsafeValues[identifier] = value
}
}
func removeValue(identifier: String) {
concurrentQueue.async(flags: .barrier) { [weak self] in
guard let self = self else {
return
}
self.unsafeValues.removeValue(forKey: identifier)
}
}
func valuesCount() -> Int {
return self.values.count
}
}