Bot releases are visible (Hide)
.removeDuplicates()
for Defaults.publisher
(#60) https://github.com/sindresorhus/Defaults/commit/760dbfb0777610be90844c4efab5aa420003bd16
https://github.com/sindresorhus/Defaults/compare/v4.0.0...v4.1.0
If you use Swift Package Manager, you need to set the build setting “Other Linker Flags” to -weak_framework Combine
to work around this Xcode bug.
Defaults.OptionalKey
https://github.com/sindresorhus/Defaults/commit/b2fdee2055c87149bef0b2fec0726a87c191926c
extension Defaults.Keys {
- static let name = OptionalKey<Double>("name")
+ static let name = Key<Double?>("name")
}
.old
and .new
options for Defaults.observe
https://github.com/sindresorhus/Defaults/commit/8376ca7f5157d692b010e731878a82b49ba1c70e
.newValue
/.oldValue
.DefaultsObservation
to Defaults.Observation
https://github.com/sindresorhus/Defaults/commit/31b56ce018f03b07cc335960d8f7aa1d49d9b0f8
@Default
property wrapper for SwiftUI https://github.com/sindresorhus/Defaults/commit/12a65c057d0defa2fb500dd15ae4255fb274f16e
.reset()
now actually removes the item instead of just setting its value to nil
.Defaults.reset()
now works with keys of different types, but it's limited to 10 keys because of Swift generics limitations https://github.com/sindresorhus/Defaults/commit/15c096d7fd7e7ef0ad4e4824cb3f96bad941440f
https://github.com/sindresorhus/Defaults/compare/v3.1.1...v4.0.0
defaults
to Defaults
https://github.com/sindresorhus/Defaults/commit/90ac6f88021e22d58b109b71866bd21471b898fedefaults[.unicorn]
→ Defaults[.unicorn]
defaults.observable
→ Defaults.observable
defaults.clear
to Defaults.removeAll
and make it a static method https://github.com/sindresorhus/Defaults/commit/27c9997134dacd097b912a39a685ea71a0a57b89
.reset()
method to reset the given keys back to their default value https://github.com/sindresorhus/Defaults/commit/d1e42154f9a2c9c7375849bd376b99a48deda47b
You can now observe changes to keys in a strongly-typed fashion. It even preserves the type of the oldValue
and newValue
keys in the change event.
extension Defaults.Keys {
static let isUnicornMode = Key<Bool>("isUnicornMode", default: false)
}
let observer = defaults.observe(.isUnicornMode) { change in
// Initial event
print(change.oldValue)
//=> false
print(change.newValue)
//=> false
// First actual event
print(change.oldValue)
//=> false
print(change.newValue)
//=> true
}
defaults[.isUnicornMode] = true
extension Defaults.Keys {
- static let quality = Defaults.Key<Double>("quality", default: 0.8)
+ static let quality = Key<Double>("quality", default: 0.8)
}
let extensionDefaults = UserDefaults(suiteName: "com.unicorn.app")!
extension Defaults.Keys {
static let isUnicorn = Key<Bool>("isUnicorn", default: true, suite: extensionDefaults)
}
defaults[.isUnicorn]
//=> true
// Or
extensionDefaults[.isUnicorn]
//=> true
When you use, for example:
extension Defaults.Keys {
static let quality = Key<Double>("quality", default: 0.8)
}
It will register 0.8
as the default value with UserDefaults, which can then be used in other contexts, like binding in Interface Builder.