123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- import Foundation
- public protocol BoolUserDefaultable {
- associatedtype BoolDefaultKey: RawRepresentable
- }
- extension BoolUserDefaultable where BoolDefaultKey.RawValue == String {
- public static func set(_ value: Bool, forKey key: BoolDefaultKey) {
- let key = key.rawValue
- UserDefaults.standard.set(value, forKey: key)
- }
- public static func bool(forKey key: BoolDefaultKey) -> Bool {
- let key = key.rawValue
- return UserDefaults.standard.bool(forKey: key)
- }
-
- }
- public protocol StringUserDefaultable {
- associatedtype StringDefaultKey: RawRepresentable
- }
- extension StringUserDefaultable where StringDefaultKey.RawValue == String {
- public static func set(_ value: String, forKey key: StringDefaultKey) {
- let key = key.rawValue
- UserDefaults.standard.set(value, forKey: key)
- }
- public static func string(forKey key: StringDefaultKey) -> String {
- let key = key.rawValue
- return UserDefaults.standard.string(forKey: key) ?? ""
- }
- }
- public protocol DoubleUserDefaultable {
- associatedtype DoubleDefaultKey: RawRepresentable
- }
- extension DoubleUserDefaultable where DoubleDefaultKey.RawValue == String {
- public static func set(_ value: Double, forKey key: DoubleDefaultKey) {
- let key = key.rawValue
- UserDefaults.standard.set(value, forKey: key)
- }
- public static func double(forKey key: DoubleDefaultKey) -> Double {
- let key = key.rawValue
- return UserDefaults.standard.double(forKey: key)
- }
- }
- public protocol IntUserDefaultable {
- associatedtype IntDefaultKey: RawRepresentable
- }
- extension IntUserDefaultable where IntDefaultKey.RawValue == String {
- public static func set(_ value: Int, forKey key: IntDefaultKey) {
- let key = key.rawValue
- UserDefaults.standard.set(value, forKey: key)
- }
- public static func int(forKey key: IntDefaultKey) -> Int {
- let key = key.rawValue
- return UserDefaults.standard.integer(forKey: key)
- }
- }
- public protocol DataUserDefaultable {
- associatedtype DataDefaultKey: RawRepresentable
- }
- extension DataUserDefaultable where DataDefaultKey.RawValue == String {
- public static func set(_ value: Data, forKey key: DataDefaultKey) {
- let key = key.rawValue
- UserDefaults.standard.set(value, forKey: key)
- }
- public static func data(forKey key: DataDefaultKey) -> Data {
- let key = key.rawValue
- return UserDefaults.standard.data(forKey: key) ?? Data()
- }
- }
- public protocol ArrayUserDefaultCodable {
- init(value: [String: AnyObject])
- func toDictionary() -> [String: AnyObject]
- }
- public protocol ArrayUserDefaultable {
- associatedtype ArrayDefaultKey: RawRepresentable
- associatedtype Item: ArrayUserDefaultCodable
- }
- extension ArrayUserDefaultable where ArrayDefaultKey.RawValue == String {
- public static func set(_ value: [Item], forKey key: ArrayDefaultKey) {
- let key = key.rawValue
- UserDefaults.standard.set(value.flatMap { $0.toDictionary() }, forKey: key)
- }
- public static func array(forKey key: ArrayDefaultKey) -> [Item] {
- let key = key.rawValue
- guard let value = UserDefaults.standard.array(forKey: key) as? [[String: AnyObject]] else {
- return []
- }
- let items = value.compactMap { Item.init(value: $0) }
- return items
- }
- }
- public protocol DictionaryUserDefaultable {
- associatedtype DictionaryDefaultKey: RawRepresentable
- }
- extension DictionaryUserDefaultable where DictionaryDefaultKey.RawValue == String {
- public static func set(_ value: [String: Any], forKey key: DictionaryDefaultKey) {
- let key = key.rawValue
- UserDefaults.standard.set(value, forKey: key)
- }
- public static func dictionary(forKey key: DictionaryDefaultKey) -> [String: Any] {
- let key = key.rawValue
- return UserDefaults.standard.dictionary(forKey: key) ?? [String: Any]()
- }
- }
|