Daniel Tull: Blog

Adding a Default Value to the User Defaults Key

Tuesday, 22 July 2025
extension UserDefaults {

  public struct Key<Value> {
    fileprivate let name: String
    fileprivate let `default`: Value
    public init(_ name: String, default: Value) {
      self.name = name
      self.default = `default`
    }
  }
}
extension UserDefaults {

  public func value<Value>(for key: Key<Value>) -> Value {
    object(forKey: key.name) as? Value ?? key.default
  }
}
extension UserDefaults {

  public func set<Value>(_ value: Value, for key: Key<Value>) {
    set(value, forKey: key.name)
  }

  public func removeValue<Value>(for key: Key<Value>) {
    removeObject(forKey: key.name)
  }
}