Daniel Tull: Blog

A Property Wrapper for User Defaults

Tuesday, 22 July 2025

Swift 5.1 introduces a new

@propertyWrapper
public final class UserDefault<Value> {

  private let defaults: UserDefaults
  private let key: UserDefaults.Key<Value>

  public init(_ key: UserDefaults.Key<Value>,
              defaults: UserDefaults = .standard) {
    self.key = key
    self.defaults = defaults
  }

  public var wrappedValue: Value {
    get { defaults.value(for: key) }
    set { defaults.set(newValue, for: key) }
  }
}