Defaultskit

Simple, Strongly Typed UserDefaults for iOS, macOS and tvOS
Alternatives To Defaultskit
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Defaultskit1,418
66 months ago8October 22, 201811mitSwift
Simple, Strongly Typed UserDefaults for iOS, macOS and tvOS
Userdefaultsstore452
a year ago18August 21, 2020mitSwift
Why not use UserDefaults to store Codable objects 😉
Foil387
17 days ago4January 25, 20222mitSwift
A lightweight property wrapper for UserDefaults done right
Persistencekit135
12 years ago10March 16, 2022mitSwift
Store and retrieve Codable objects to various persistence layers, in a couple lines of code!
Stores112
2 months ago1mitSwift
Typed key-value storage solution to store Codable types in various persistence layers with few lines of code!
Storez65
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
Keyvaluecontainer9
a year ago1January 22, 2020mitSwift
Type-safe containers for key-value storage
Objectuserdefaults6
5 years agomitSwift
An object oriented and clean wrapper UserDefaults.
Userdefaults3
5 years agomitSwift
🗂 UserDefaults extension framework
Alternatives To Defaultskit
Select To Compare


Alternative Project Comparisons
Readme

DefaultsKit

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 <<

Usage

Instantiate, or get a shared instance of Defaults

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

Then:

// 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
}

Then:

// 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

License

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

Help Wanted

Review/Translate README.zh-CN.md 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
Swift4
Chinese
Tvos
Codable
Swift Framework
Userdefaults