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!
To integrate UserDefaultsStore into your iOS project using CocoaPods, specify it in your Podfile:
pod 'UserDefaultsStore'
To integrate UserDefaultsStore using Carthage, add the following to your Cartfile:
github "omaralbeik/UserDefaultsStore"
Add the Sources folder to your Xcode project.
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:
The Identifiable
protocol lets UserDefaultsStore knows what is the unique id for each object.
struct User: Codable, Identifiable {
static let idKey = \User.id
...
}
struct Laptop: Codable, Identifiable {
static let idKey = \Laptop.model
...
}
- Notice how
User
usesInt
for its id, whileLaptop
usesString
. Swift rocks 🤘
let usersStore = UserDefaultsStore<User>(uniqueIdentifier: "users")!
let laptopsStore = UserDefaultsStore<Laptop>(uniqueIdentifier: "laptops")!
let macbook = Laptop(model: "A1278", name: "MacBook Pro")
let john = User(userId: 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)
// Get all objects in a store
let laptops = laptopsStore.allObjects()
// 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
- iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+
- Xcode 9+
- Swift 4+
Special thanks to Paul Hudson for his article on how to use Swift keypaths.
UserDefaultsStore is released under the MIT license. See LICENSE for more information.