Contents

sindresorhus/defaults

> Swifty and modern [UserDefaults](https://developer.apple.com/documentation/foundation/userdefaults)

Highlights

  • Strongly typed: You declare the type and default value upfront.
  • SwiftUI: Property wrapper that updates the view when the UserDefaults value changes.
  • Codable support: You can store any Codable value, like an enum.
  • NSSecureCoding support: You can store any NSSecureCoding value.
  • Observation: Observe changes to keys.
  • Debuggable: The data is stored as JSON-serialized values.
  • Customizable: You can serialize and deserialize your own type in your own way.
  • iCloud support: Automatically synchronize data between devices.

Benefits over `@AppStorage`

  • You define strongly-typed identifiers in a single place and can use them everywhere.
  • You also define the default values in a single place instead of having to remember what default value you used in other places.
  • You can use it outside of SwiftUI.
  • You can observe value updates.
  • Supports many more types, even Codable.
  • Easy to add support for your own custom types.
  • Comes with a convenience SwiftUI Toggle component.

Compatibility

  • macOS 11+
  • iOS 14+
  • tvOS 14+
  • watchOS 9+
  • visionOS 1+

Install

Add https://github.com/sindresorhus/Defaults in the “Swift Package Manager” tab in Xcode.

Documentation

Full documentation

Usage

import Defaults

extension Defaults.Keys {
	static let quality = Key<Double>("quality", default: 0.8)
}

Defaults[.quality]
//=> 0.8

Defaults[.quality] = 0.5
//=> 0.5

You can also use it in SwiftUI:

struct ContentView: View {
	@Default(.quality) var quality

	var body: some View {
		Slider(value: $quality, in: 0...1)
	}
}

Maintainers

Package Metadata

Repository: sindresorhus/defaults

Default branch: main

README: readme.md