Skip to content

Instantly share code, notes, and snippets.

@kitasuke
Created December 26, 2016 12:59
Show Gist options
  • Save kitasuke/c28e63bb8a472d03b3b74fd9133b60cd to your computer and use it in GitHub Desktop.
Save kitasuke/c28e63bb8a472d03b3b74fd9133b60cd to your computer and use it in GitHub Desktop.
import Foundation
protocol UserDefaultsStorable {
associatedtype UserDefaultsKey: RawRepresentable
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Bool?
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Int?
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Int64?
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Double?
static func userDefaultsValue(forKey key: UserDefaultsKey) -> String?
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Date?
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Data?
static func setUserDefaults(_ value: Bool?, forKey key: UserDefaultsKey)
static func setUserDefaults(_ value: Int?, forKey key: UserDefaultsKey)
static func setUserDefaults(_ value: Int64?, forKey key: UserDefaultsKey)
static func setUserDefaults(_ value: Double?, forKey key: UserDefaultsKey)
static func setUserDefaults(_ value: String?, forKey key: UserDefaultsKey)
static func setUserDefaults(_ value: Date?, forKey key: UserDefaultsKey)
static func setUserDefaults(_ value: Data?, forKey key: UserDefaultsKey)
static func removeUserDefaultsValue(forKey key: UserDefaultsKey)
static func removeAll()
}
extension UserDefaultsStorable where UserDefaultsKey.RawValue == String {
// MARK: - Get
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Bool? {
return UserDefaults.standard.bool(forKey: key.rawValue)
}
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Int? {
return UserDefaults.standard.integer(forKey: key.rawValue)
}
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Int64? {
return (UserDefaults.standard.object(forKey: key.rawValue) as? NSNumber)?.int64Value
}
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Double? {
return UserDefaults.standard.double(forKey: key.rawValue)
}
static func userDefaultsValue(forKey key: UserDefaultsKey) -> String? {
return UserDefaults.standard.string(forKey: key.rawValue)
}
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Date? {
return UserDefaults.standard.value(forKey: key.rawValue) as? Date
}
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Data? {
return UserDefaults.standard.data(forKey: key.rawValue)
}
// MARK: - Set
static func setUserDefaults(_ value: Bool?, forKey key: UserDefaultsKey) {
UserDefaults.standard.set(value, forKey: key.rawValue)
}
static func setUserDefaults(_ value: Int?, forKey key: UserDefaultsKey) {
UserDefaults.standard.set(value, forKey: key.rawValue)
}
static func setUserDefaults(_ value: Int64?, forKey key: UserDefaultsKey) {
UserDefaults.standard.set(value.map(NSNumber.init), forKey: key.rawValue)
}
static func setUserDefaults(_ value: Double?, forKey key: UserDefaultsKey) {
UserDefaults.standard.set(value, forKey: key.rawValue)
}
static func setUserDefaults(_ value: String?, forKey key: UserDefaultsKey) {
UserDefaults.standard.set(value, forKey: key.rawValue)
}
static func setUserDefaults(_ value: Date?, forKey key: UserDefaultsKey) {
UserDefaults.standard.set(value, forKey: key.rawValue)
}
static func setUserDefaults(_ value: Data?, forKey key: UserDefaultsKey) {
UserDefaults.standard.set(value, forKey: key.rawValue)
}
// MARK: - Remove
static func removeUserDefaultsValue(forKey key: UserDefaultsKey) {
UserDefaults.standard.removeObject(forKey: key.rawValue)
}
static func removeAll() {
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment