GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - unorderly/Defaults: 💾 Swifty and modern UserDefaults

BranchesTags
Open more actions menu
 
 

Latest commit

 

History

166 Commits
166 Commits

Folders and files

NameName
Last commit message
Last commit date
.github/workflows
.github/workflows
 
 
.swiftpm/xcode/package.xcworkspace
.swiftpm/xcode/package.xcworkspace
 
 
Sources
Sources
 
 
Tests
Tests
 
 
.editorconfig
.editorconfig
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
.spi.yml
.spi.yml
 
 
.swiftlint.yml
.swiftlint.yml
 
 
Package.resolved
Package.resolved
 
 
Package.swift
Package.swift
 
 
license
license
 
 
readme.md
readme.md
 
 

Repository files navigation

Defaults

Swifty and modern UserDefaults

Store key-value pairs persistently across launches of your app.

It uses UserDefaults underneath but exposes a type-safe facade with lots of nice conveniences.

It's used in production by all my apps (4 million+ users).

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

  • Sindre Sorhus
  • @hank121314

Related

  • KeyboardShortcuts - Add user-customizable global keyboard shortcuts to your macOS app
  • LaunchAtLogin - Add "Launch at Login" functionality to your macOS app
  • DockProgress - Show progress in your app's Dock icon
  • Gifski - Convert videos to high-quality GIFs on your Mac
  • More…

About

💾 Swifty and modern UserDefaults

swiftpackageindex.com/sindresorhus/Defaults/documentation/defaults

Resources

Readme
License
Activity
Custom properties

Stars

0 stars

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.