Swift version: 5.10
Swift 4 introduced a new way to load and save data, replacing the old NSCoding
protocol with something that’s more flexible, safer, and easier to write: Codable
.
Unless you want a custom implementation, just making your data type conform to Codable
is all it takes to allow it to be saved to property list XML or JSON.
For example, here’s a custom struct that conforms to Codable
, along with a few instances of it:
struct Language: Codable {
var name: String
var version: Int
}
let swift = Language(name: "Swift", version: 4)
let php = Language(name: "PHP", version: 7)
let perl = Language(name: "Perl", version: 6)
You can see I've marked the Language struct as conforming to the Codable
protocol – there’s no need to add custom loading and saving code like we had with NSCoding
.
With that one tiny conformance, we can convert it to a Data
representation of JSON like this:
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(swift) {
// save `encoded` somewhere
}
Swift will automatically encode all properties inside your data type – you don't need to do anything.
To prove that everything is working well, we can try converting that Data
object into a string so we can print it out, then decode it back into a new Language instance that we can read from:
if let encoded = try? encoder.encode(swift) {
if let json = String(data: encoded, encoding: .utf8) {
print(json)
}
let decoder = JSONDecoder()
if let decoded = try? decoder.decode(Language.self, from: encoded) {
print(decoded.name)
}
}
Notice how decoding doesn't require a typecast – you provide the data type name as its first parameter, so Swift infers the return type from there.
SPONSORED Alex is the iOS & Mac developer’s ultimate AI assistant. It integrates with Xcode, offering a best-in-class Swift coding agent. Generate modern SwiftUI from images. Fast-apply suggestions from Claude 3.5 Sonnet, o3-mini, and DeepSeek R1. Autofix Swift 6 errors and warnings. And so much more. Start your 7-day free trial today!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 8.0 – see Hacking with Swift tutorial 12
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.