Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save illescasDaniel/c25ceaabfd54cf319c5e9e80cb3a45ec to your computer and use it in GitHub Desktop.

Select an option

Save illescasDaniel/c25ceaabfd54cf319c5e9e80cb3a45ec to your computer and use it in GitHub Desktop.
UserDefault property wrapper
import Foundation
@propertyDelegate
public struct UserDefault<ValueType> {
public let key: String
public let defaults: UserDefaults
public let defaultValue: () -> ValueType
init(key: String, defaultValue: @autoclosure @escaping () -> ValueType, defaults: UserDefaults = .standard) {
self.key = key
self.defaultValue = defaultValue
self.defaults = defaults
}
public var value: ValueType {
get {
if let userDefaultsObject = userDefaultsGet() {
return userDefaultsObject
}
let defValue = defaultValue()
userDefaultsSet(defValue)
return defValue
}
set { userDefaultsSet(newValue) }
}
private func userDefaultsGet() -> ValueType? {
return self.defaults.object(forKey: self.key) as? ValueType
}
private func userDefaultsSet(_ newValue: ValueType) {
self.defaults.set(newValue, forKey: self.key)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment