Swift version: 5.10
The Codable
protocol makes it easy to load and save native Swift types to JSON, and with a little typecasting you can get that data into UserDefaults
so it’s safe.
Here’s some trivial Codable
data we can work with:
struct Person: Codable {
var name: String
}
let taylor = Person(name: "Taylor Swift")
To save that to UserDefaults
you must first encode it as JSON using JSONEncoder
, which will send back a Data
instance you can send straight to UserDefaults
. For example:
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(taylor) {
let defaults = UserDefaults.standard
defaults.set(encoded, forKey: "SavedPerson")
}
Reading saved data back into a Person
instance is a matter of converting from Data
using a JSONDecoder
, like this:
if let savedPerson = defaults.object(forKey: "SavedPerson") as? Data {
let decoder = JSONDecoder()
if let loadedPerson = try? decoder.decode(Person.self, from: savedPerson) {
print(loadedPerson.name)
}
}
SPONSORED Take the pain out of configuring and testing your paywalls. RevenueCat's Paywalls allow you to remotely configure and A/B test your entire paywall UI without any code changes or app updates.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 8.0 – learn more in my book Swift Design Patterns
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.