Simple, Strongly Typed UserDefaults for iOS, macOS and tvOS
Alternatives To Defaultskit
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
66 months ago8October 22, 201811mitSwift
Simple, Strongly Typed UserDefaults for iOS, macOS and tvOS
a year ago18August 21, 2020mitSwift
Why not use UserDefaults to store Codable objects 😉
17 days ago4January 25, 20222mitSwift
A lightweight property wrapper for UserDefaults done right
12 years ago10March 16, 2022mitSwift
Store and retrieve Codable objects to various persistence layers, in a couple lines of code!
2 months ago1mitSwift
Typed key-value storage solution to store Codable types in various persistence layers with few lines of code!
1a year ago6March 30, 20191mitSwift
💾 Safe, statically-typed, store-agnostic key-value storage written in Swift!
Swift Standard Clients30
2 years agomitSwift
Client declarations and live implementations for standard iOS managers
a year ago1January 22, 2020mitSwift
Type-safe containers for key-value storage
5 years agomitSwift
An object oriented and clean wrapper UserDefaults.
5 years agomitSwift
🗂 UserDefaults extension framework
Alternatives To Defaultskit
Select To Compare

Alternative Project Comparisons


cocoapods compatible carthage compatible language swift


DefaultsKit leverages Swift 4's powerful Codable capabilities to provide a Simple and Strongly Typed wrapper on top of UserDefaults. It uses less than 70 lines of code to acomplish this.

Installation >> instructions <<


Instantiate, or get a shared instance of Defaults

let defaults = Defaults() // or Defaults.shared


// Define a key
let key = Key<String>("someKey")

// Set a value
defaults.set("Codable FTW 😃", for: key)

// Read the value back
defaults.get(for: key) // Output: Codable FTW 😃

Check if a key has a value:

if defaults.has(key) { 
    // Do your thing

If you just need to know that a key/value pair exists, without actually using the value, use the has() method instead of the optional get(for:key). For complex objects it will prevent any unnecessary deserialization.

Implicit Member Expression

You can find a convenience wrapper for your keys by extending DefaultsKey. This allows you use Implicit Member Expression:

// Extend with a custom key
extension DefaultsKey {
    static let someKey = Key<String>("someKey")

// Then use it like this
defaults.set("Some key", for: .someKey)
defaults.get(for: .someKey) // Output: Some key

Complex objects

To store a complex object just conform to the Codable protocol:

struct Person: Codable {
    let name: String
    let age: Int


// Create a key
let key = Key<Person>("personKey")

// Get an instance of your Codable conforming enum, struct or class
let person = Person(name: "Bonnie Greenwell", age: 80)

// Set the value
defaults.set(person, for: key)

And finally:

// Read it back
let person = defaults.get(for: key)
person?.name // Bonnie Greenwell
person?.age  // 80

Nested Objects

You can also use nested objects as long as they conform to the Codable protocol:

enum Pet: String, Codable {
    case cat
    case dog

struct Person: Codable {
    let name: String
    let pets: [Pet]

// Get a Codable conforming instante
let person = Person(name: "Claire", pets: [.cat])

// Set the value
defaults.set(person, for: key)

// And read it back
let person = defaults.get(for: key)
person?.name        // Claire
person?.pets.first  // cat


DefaultsKit is released under the MIT license. See LICENSE for details.

Help Wanted

Review/Translate to Chinese

Chinese is the #1 spoken language in the world and I'd love to have DefaultsKit be more inclusive, unfortunately I don't speak Chinese. If you know chinese, and would like to help out, please see issue #1

Thank you 🙏

Popular Tvos Projects
Popular Userdefaults Projects
Popular Operating Systems Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Swift Framework