DefaultsKit
- language: Swift 4
- platform: ios / macOs / tvOs
- device: iphone
- license: MIT
Tag
Download
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 😃
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.
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 thehas()method instead of the optionalget(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
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
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
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
