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(a)// or Defaults.sharedCopy the code
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 😃Copy the code
if defaults.has(key) {
// Do your thing
}Copy the code
If you just need to know that a key/value pair exists, without actually using the value, use the
has()
method instead of the optionalget(for:key)
. For complex objects it will prevent any unnecessary deserialization.
Complex objects
To store a complex object just conform to the Codable protocol:
struct Person: Codable {
let name: String
let age: Int
}Copy the code
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)Copy the code
And finally:
// Read it back
let person = defaults.get(for: key)
person?.name // Bonnie Greenwell
person?.age // 80Copy the code
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 // catCopy the code
DefaultsKit is released under the MIT license. See LICENSE for details.