Skip to content

Instantly share code, notes, and snippets.

@manas-sharma-1683
Created March 1, 2021 21:11
Show Gist options
  • Save manas-sharma-1683/d5b2c13bba774d6f8583d557e6c9d56b to your computer and use it in GitHub Desktop.
Save manas-sharma-1683/d5b2c13bba774d6f8583d557e6c9d56b to your computer and use it in GitHub Desktop.
Type safe User defaults.
import Foundation
@propertyWrapper
struct Defaults<Value> {
let key: Key
let defaultValue: Value
var wrappedValue: Value {
get {
return (UserDefaults.standard.object(forKey: key.rawValue) as? Value) ?? defaultValue
} set {
UserDefaults.standard.set(newValue, forKey: key.rawValue)
}
}
}
extension Defaults {
enum Key: String {
case isNewUser = "is-new-user"
}
}
/* Usage */
extension UserDefaults {
@Defaults(key: .isNewUser, defaultValue: true)
static var isNewUser: Bool
}
print(UserDefaults.isNewUser) // prints true
UserDefaults.isNewUser = false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment