You love Swift’s Codable protocol and use it everywhere, who doesn’t! Here is an easy and very light way to store and retrieve -reasonable amount 😅- of Codable objects, in a couple lines of code!
New in v3.0
Both UserDefaultsStore and SingleUserDefaultsStore are thread safe!
BREAKING: Use of custom encoder/decoder has been removed.
Let’s say you have 2 structs; User and Laptop defined as bellow:
struct User: Codable {
var id: Int
var firstName: String
var lastName: String
var laptop: Laptop?
}
struct Laptop: Codable {
var model: String
var name: String
}
Here is how you store them in UserDefaultsStore:
1. Conform to the Identifiable protocol and set the id property
The Identifiable protocol lets UserDefaultsStore knows what is the unique id for each object.
struct User: Codable, Identifiable {
...
}
struct Laptop: Codable, Identifiable {
var id: String { model }
...
}
2. Create UserDefaults Stores
let usersStore = UserDefaultsStore<User>(uniqueIdentifier: "users")
let laptopsStore = UserDefaultsStore<Laptop>(uniqueIdentifier: "laptops")
3. Voilà, you’re all set!
let macbook = Laptop(model: "A1278", name: "MacBook Pro")
let john = User(id: 1, firstName: "John", lastName: "Appleseed", laptop: macbook)
// Save an object to a store
try! usersStore.save(john)
// Save an array of objects to a store
try! usersStore.save([jane, steve, jessica])
// Get an object from store
let user = store.object(withId: 1)
let laptop = store.object(withId: "A1278")
// Get all objects in a store
let laptops = laptopsStore.allObjects()
// Check if store has an object
print(usersStore.hasObject(withId: 10)) // false
// Iterate over all objects in a store
laptopsStore.forEach { laptop in
print(laptop.name)
}
// Delete an object from a store
usersStore.delete(withId: 1)
// Delete all objects in a store
laptops.deleteAll()
// Know how many objects are stored in a store
let usersCount = usersStore.objectsCount
Looking to store a single item only?
Use SingleUserDefaultsStore, it enables storing and retrieving a single value of Int, Double, String, or any Codable type.
⚠️ Deprecated ⚠️
Please use the new Stores library instead.
tl;dr
You love Swift’s
Codableprotocol and use it everywhere, who doesn’t! Here is an easy and very light way to store and retrieve -reasonable amount 😅- ofCodableobjects, in a couple lines of code!New in v3.0
UserDefaultsStoreandSingleUserDefaultsStoreare thread safe!Installation
Swift Package Manager
Package.swiftfile:Manually
Add the Sources folder to your Xcode project.
Usage
Let’s say you have 2 structs;
UserandLaptopdefined as bellow:Here is how you store them in UserDefaultsStore:
1. Conform to the
Identifiableprotocol and set theidpropertyThe
Identifiableprotocol lets UserDefaultsStore knows what is the unique id for each object.2. Create UserDefaults Stores
3. Voilà, you’re all set!
Looking to store a single item only?
Use
SingleUserDefaultsStore, it enables storing and retrieving a single value ofInt,Double,String, or anyCodabletype.Requirements
Thanks
Special thanks to:
Credits
Icon made by freepik from flaticon.com.
License
UserDefaultsStore is released under the MIT license. See LICENSE for more information.