Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Setting optional values to nil doesn't work #119

Open
pejrich opened this issue Nov 3, 2022 · 1 comment
Open

Setting optional values to nil doesn't work #119

pejrich opened this issue Nov 3, 2022 · 1 comment

Comments

@pejrich
Copy link

pejrich commented Nov 3, 2022

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?

@sindresorhus
Copy link
Owner

The default parameter isn't meant for optionals. The problem is that I haven't found a good way to prevent it being available for optionals.

The correct solution here is to add an initialValue parameter: #54

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants