Product Promotion
0x5a.live
for different kinds of informations and explorations.
GitHub - nmdias/DefaultsKit: Simple, Strongly Typed UserDefaults for iOS, macOS and tvOS
Simple, Strongly Typed UserDefaults for iOS, macOS and tvOS - nmdias/DefaultsKit
Visit SiteGitHub - nmdias/DefaultsKit: Simple, Strongly Typed UserDefaults for iOS, macOS and tvOS
Simple, Strongly Typed UserDefaults for iOS, macOS and tvOS - nmdias/DefaultsKit
Powered by 0x5a.live ๐
DefaultsKit is a lightweight Swift library that builds on Codable to offer a Simple, Strongly Typed and compact wrapper for UserDefaults. With fewer than 100 lines of code, itโs both easy to use and highly efficient.
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 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 var someKey: Key<Int> { Key("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 ๐
Swift Resources
are all listed below.
Made with โค๏ธ
to provide different kinds of informations and resources.