51 lines
1.4 KiB
Swift
51 lines
1.4 KiB
Swift
import Foundation
|
|
|
|
public protocol SettingsProtocol: ObservableObject {
|
|
|
|
var user: User { get set }
|
|
var showDebugInfo: Bool { get set }
|
|
|
|
}
|
|
|
|
public class MainSettings: SettingsProtocol {
|
|
private let defaults: UserDefaults
|
|
public static var shared: any SettingsProtocol = Testing.isUITesting ? TestSettings() : MainSettings()
|
|
|
|
@Published
|
|
public var user: User {
|
|
didSet {
|
|
if let json = try? JSONEncoder().encode(self.user) {
|
|
self.defaults.set(json, forKey: "user")
|
|
self.defaults.synchronize()
|
|
}
|
|
}
|
|
}
|
|
|
|
public var showDebugInfo: Bool = false {
|
|
didSet {
|
|
self.defaults.set(self.showDebugInfo, forKey: "showDebugInfo")
|
|
self.defaults.synchronize()
|
|
}
|
|
}
|
|
|
|
public init(defaults: UserDefaults = .standard) {
|
|
self.defaults = defaults
|
|
|
|
// if let bundleID = Bundle.main.bundleIdentifier {
|
|
// UserDefaults.standard.removePersistentDomain(forName: bundleID)
|
|
// }
|
|
|
|
self.defaults.register(defaults: [
|
|
"showDebugInfo": false
|
|
])
|
|
|
|
self.showDebugInfo = self.defaults.bool(forKey: "showDebugInfo")
|
|
|
|
if let data = self.defaults.data(forKey: "user") {
|
|
self.user = (try? JSONDecoder().decode(User.self, from: data)) ?? User()
|
|
} else {
|
|
self.user = User()
|
|
}
|
|
}
|
|
}
|