Skip to content

Instantly share code, notes, and snippets.

@ANSCoder
Last active May 6, 2020 20:56
Show Gist options
  • Save ANSCoder/2830fa531ddbc39db6c0be6ee2bf3e53 to your computer and use it in GitHub Desktop.
Save ANSCoder/2830fa531ddbc39db6c0be6ee2bf3e53 to your computer and use it in GitHub Desktop.
Propertywrapper for UserDefaults in Swift
private protocol AnyOptional{
var isNil: Bool { get }
}
extension Optional: AnyOptional{
var isNil: Bool { self == nil }
}
@propertyWrapper
struct UserDefaultsWrapper<T> {
let key: String
let defaultValue: T
let userDefaults: UserDefaults = .standard
var wrappedValue: T {
get {
return userDefaults.object(forKey: key) as? T ?? defaultValue
}
set {
if let optional = newValue as? AnyOptional, optional.isNil {
UserDefaults.standard.removeObject(forKey: key)
}else{
userDefaults.set(newValue, forKey: key)
}
}
}
}
struct UserDefaultsConfig{
@UserDefaultsWrapper(key: "com.user.session", defaultValue: false)
static var sessionStarted: Bool
@UserDefaultsWrapper(key: "com.user.details", defaultValue: [:])
static var userDetails: [String: String]
}
//Saving values
UserDefaultsConfig.sessionStarted = true
print(UserDefaultsConfig.sessionStarted)
UserDefaultsConfig.userDetails = ["userName": "Anand", "country": "India"]
print(UserDefaultsConfig.userDetails)
//Resetting values
UserDefaultsConfig.sessionStarted = false
UserDefaultsConfig.userDetails = [:]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment