55 lines
1.5 KiB
Swift
55 lines
1.5 KiB
Swift
//
|
|
// Settings.swift
|
|
//
|
|
//
|
|
// Created by Juraldinio on 11/29/22.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
final public class Settings {
|
|
|
|
public static let shared = Settings()
|
|
|
|
private init() {}
|
|
|
|
public func contains(_ key: CommonKey) -> Bool { defaults.value(forKey: key.rawValue) != nil }
|
|
|
|
public subscript<T>(_ key: CommonKey) -> T? {
|
|
get { defaults.value(forKey: key.rawValue) as? T }
|
|
set { set(value: newValue, for: key) }
|
|
}
|
|
|
|
public subscript<T: Codable>(_ key: CommonKey) -> [T]? {
|
|
get {
|
|
let decoder = JSONDecoder()
|
|
guard let data = defaults.value(forKey: key.rawValue) as? Data,
|
|
let value = try? decoder.decode([T].self, from: data) else { return nil }
|
|
return value
|
|
}
|
|
set {
|
|
let encoder = JSONEncoder()
|
|
guard let value = newValue,
|
|
let data = try? encoder.encode(value) else { return }
|
|
set(value: data, for: key)
|
|
}
|
|
}
|
|
|
|
public subscript(_ key: CommonKey) -> Bool {
|
|
get { defaults.bool(forKey: key.rawValue) }
|
|
set { set(value: newValue, for: key) }
|
|
}
|
|
|
|
public subscript(_ key: CommonKey) -> Int {
|
|
get { (defaults.value(forKey: key.rawValue) as? Int) ?? 0 }
|
|
set { set(value: newValue, for: key) }
|
|
}
|
|
|
|
private func set(value: Any?, for key: CommonKey) {
|
|
defaults.setValue(value, forKey: key.rawValue)
|
|
defaults.synchronize()
|
|
}
|
|
|
|
private var defaults: UserDefaults { UserDefaults.standard }
|
|
}
|