Files

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 }
}