You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
// Define a key
letkey=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
extensionDefaultsKey{staticvarsomeKey: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:
structPerson:Codable{letname:Stringletage:Int}
Then:
// Create a key
letkey=Key<Person>("personKey")
// Get an instance of your Codable conforming enum, struct or class
letperson=Person(name:"Bonnie Greenwell", age:80)
// Set the value
defaults.set(person, for: key)
And finally:
// Read it back
letperson= 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:
enumPet:String,Codable{case cat
case dog
}structPerson:Codable{letname:Stringletpets:[Pet]}
// Get a Codable conforming instante
letperson=Person(name:"Claire", pets:[.cat])
// Set the value
defaults.set(person, for: key)
// And read it back
letperson= defaults.get(for: key)
person?.name // Claire
person?.pets.first // cat
License
DefaultsKit is released under the MIT license. See LICENSE for details.
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 🙏
About
Simple, Strongly Typed UserDefaults for iOS, macOS and tvOS