Skip to content

Instantly share code, notes, and snippets.

@ericlewis
Created June 16, 2019 03:42
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 ericlewis/8fe3b7903d5ad8de4fb9f401bb2da1c6 to your computer and use it in GitHub Desktop.
Save ericlewis/8fe3b7903d5ad8de4fb9f401bb2da1c6 to your computer and use it in GitHub Desktop.
@propertyWrapper
public struct UserDefault<T>: UserDefaultSpec {
let key: String
let defaultValue: T
public init(_ key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
public var value: T {
get {
UserDefaults.standard[key] ?? defaultValue
}
set {
UserDefaults.standard[key] = newValue
}
}
}
// GRRR why don't you work?!
public extension UserDefault where T: RawRepresentable {
var value: T {
get {
if let rawValue = UserDefaults.standard.value(forKey: key) as? T.RawValue {
return T(rawValue: rawValue)!
}
return defaultValue
}
set {
UserDefaults.standard.set(newValue.rawValue, forKey: key)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment