Last active
December 11, 2020 13:57
-
-
Save HugoSay/cc4c532a4b3bad63bf77f43492a564f8 to your computer and use it in GitHub Desktop.
using a property wrapper for user defaults
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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