Defaults icon indicating copy to clipboard operation
Defaults copied to clipboard

Setting optional values to nil doesn't work

Open pejrich opened this issue 1 year ago • 1 comments

extension Defaults.Keys {
  static let foo = Key<Int?>("foo", default: 1)
}

Here I have some option that defaults to 1, but is optional.

Defaults[.foo] // => 1
Defaults[.foo] = 2
Defaults[.foo] // => 2
Defaults[.foo] = nil
Defaults[.foo] // => 1

Why would explicitly setting an optional to nil make it reset to the default? Isn't that what reset() is for? Logically it would make sense to have an option that has a default value, but can also be turned off.

I tried with an Enum:

enum OptionalKey: Defaults.Serializable {
  case some(Int)
  case none
}

But this fails as it doesn't conform to Defaults.Serializable.

Is there no way to have both a default key, but also retain the ability to set it to nil?

pejrich avatar Nov 03 '22 19:11 pejrich