Skip to content

Instantly share code, notes, and snippets.

@ha1f
Last active February 26, 2019 07:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ha1f/287b2b23577bb272815c47608340d26f to your computer and use it in GitHub Desktop.
Save ha1f/287b2b23577bb272815c47608340d26f to your computer and use it in GitHub Desktop.
//
// UserDefaultsStoreItem.swift
//
// Created by ha1f on 2019/02/26.
// Copyright © 2019年 ha1f. All rights reserved.
//
import Foundation
struct UserDefaultsStoreItem<T> {
let userDefaults: UserDefaults
let key: String
init(key: String, userDefaults: UserDefaults = .standard) {
self.key = key
self.userDefaults = userDefaults
}
}
extension UserDefaultsStoreItem {
func remove() {
userDefaults.removeObject(forKey: key)
}
}
extension UserDefaultsStoreItem where T == Bool {
func get() -> Bool {
return userDefaults.bool(forKey: key)
}
func set(_ value: Bool) {
userDefaults.set(value, forKey: key)
}
}
extension UserDefaultsStoreItem where T == String {
func get() -> String? {
return userDefaults.string(forKey: key)
}
func set(_ value: String) {
userDefaults.set(value, forKey: key)
}
}
extension UserDefaultsStoreItem where T == URL {
func get() -> URL? {
return userDefaults.url(forKey: key)
}
func set(_ value: URL) {
userDefaults.set(value, forKey: key)
}
}
extension UserDefaultsStoreItem where T == Data {
func get() -> Data? {
return userDefaults.data(forKey: key)
}
func set(_ value: Data) {
userDefaults.set(value, forKey: key)
}
}
extension UserDefaultsStoreItem where T == Double {
func get() -> Double? {
return userDefaults.double(forKey: key)
}
func set(_ value: Double) {
userDefaults.set(value, forKey: key)
}
}
extension UserDefaultsStoreItem where T == Float {
func get() -> Float? {
return userDefaults.float(forKey: key)
}
func set(_ value: Float) {
userDefaults.set(value, forKey: key)
}
}
extension UserDefaultsStoreItem where T == Int {
func get() -> Int? {
return userDefaults.integer(forKey: key)
}
func set(_ value: Int) {
userDefaults.set(value, forKey: key)
}
}
extension UserDefaultsStoreItem where T == [String] {
func get() -> [String]? {
return userDefaults.stringArray(forKey: key)
}
func set(_ value: [String]) {
userDefaults.set(value, forKey: key)
}
}
extension UserDefaultsStoreItem where T: Codable {
func get() -> T? {
guard let data = userDefaults.data(forKey: key) else {
return nil
}
return try? JSONDecoder().decode(T.self, from: data)
}
func set(_ value: T) {
guard let data = try? JSONEncoder().encode(value) else {
return
}
userDefaults.set(data, forKey: key)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment