-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUserDefaultsConfig
More file actions
49 lines (39 loc) · 1.3 KB
/
Copy pathUserDefaultsConfig
File metadata and controls
49 lines (39 loc) · 1.3 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
43
44
45
46
47
48
49
import Foundation
struct UserDefaultsConfig {
enum Key: String {
case app_stage
}
static let preferences = UserDefaults.standard
static func set<T: Encodable> (_ value: T?, forKey key: Key) {
self.set(value, forKey: key.rawValue)
}
static func set<T: Encodable> (_ value: T?, forKey key: String) {
guard let value = value else {
removeValue(forKey: key)
return
}
do {
let data = try JSONEncoder().encode(value)
preferences.setValue(data, forKey: key)
preferences.synchronize()
} catch {
Logger.err(error)
}
}
static func get<T: Decodable>(forKey key: Key) -> T? {
return self.get(forKey: key.rawValue)
}
static func get<T: Decodable>(forKey key: String) -> T? {
guard let data = preferences.data(forKey: key) else { return nil }
return try? JSONDecoder().decode(T.self, from: data)
}
static func removeValue(forKey key: Key) {
preferences.removeObject(forKey: key.rawValue)
}
static func removeValue(forKey key: String) {
preferences.removeObject(forKey: key)
}
static func removeAllInfo() {
self.removeValue(forKey: .app_stage)
}
}