Skip to content

Instantly share code, notes, and snippets.

@HugoSay
Last active December 11, 2020 13:57
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 HugoSay/cc4c532a4b3bad63bf77f43492a564f8 to your computer and use it in GitHub Desktop.
Save HugoSay/cc4c532a4b3bad63bf77f43492a564f8 to your computer and use it in GitHub Desktop.
using a property wrapper for user defaults
//
// UserDefaultStored.swift
// SwiftUICourse
//
// Created by Hugo Saynac on 25/06/2020.
//
import Foundation
@propertyWrapper
struct UserDefaultStored<Object: Codable> {
let key: String
let encoder = JSONEncoder()
let decoder = JSONDecoder()
let userDefaults: UserDefaults
init(key: String) {
self.userDefaults = UserDefaults.standard
self.key = key
}
var wrappedValue: Object? {
get {
let data = userDefaults.object(forKey: key) as? Data
return try? data.map { try decoder.decode(Object.self, from: $0) }
}
set {
let encoded = try? encoder.encode(newValue)
userDefaults.set(encoded, forKey: key)
}
}
}
struct MyUser: Codable {
let name: String
let nombreDeGlands: Int
}
enum UserInfo {
@UserDefaultStored(key: "isFirstLaunch") private static var _isFirstLaunch: Bool?
static var isFirstLaunch: Bool {
_isFirstLaunch ?? true
}
@UserDefaultStored(key: "userStore") static var currentUser: MyUser?
}
func exemple() {
UserInfo.currentUser?.name
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment