|
//
// UserDefaultsExt.swift
// PaiaiDataKit
//
// Created by FFIB on 2017/9/22.
// Copyright © 2017年 FFIB. All rights reserved.
//
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]()
}
}
|