top of page
Writer's pictureDi Nerd Apps

Encoding and Decoding: Codable, Encodable, and Decodable in Swift 🤓

Welcome, Swift developers! Have you ever felt overwhelmed with JSON parsing, wondering if there’s an easier, more fun way to do it? 🤔 Good news, Codable is here to save the day! 🎉

In this article, we’ll dive into the world of Codable, Encodable, and Decodable in Swift. Along the way, we’ll sprinkle in some humor and even an emoji or two to keep things entertaining. 🥳


Codable: The JSON Whisperer 🧙‍♂️


In the magical world of Swift, Codable is like a JSON whisperer who can help you effortlessly parse JSON data. It’s a typealias for two protocols, Encodable and Decodable, which handle JSON encoding and decoding, respectively.


Encodable: JSON Encoder Extraordinaire 🎩


When you have a Swift object and want to turn it into JSON data, Encodable is the master of ceremonies. It lets you transform your Swift objects into JSON like a magician. ✨


Decodable: JSON Decoder Detective 🕵️‍♀️


On the flip side, when you have JSON data that you want to convert into a Swift object, Decodable is your go-to detective. It cracks the code and turns that JSON into a beautiful Swift object. 🔎

Now that we’ve introduced our heroes, let’s see them in action! 🦸‍♂️


Codable in Action: The JSON Adventure 🚀


Let’s say you’re building a groundbreaking app for space enthusiasts. You want to display a list of planets in our solar system, and you receive the data from an API in JSON format. Codable, Encodable, and Decodable will help you seamlessly parse this JSON data.


Step 1: Create a Swift Struct for Planet Data 🪐


To begin, we’ll create a struct that represents a planet. This struct must conform to the Codable protocol.

struct Planet: Codable {
    let name: String
    let distanceFromSun: Double
}

By adopting the Codable protocol, our Planet struct gains the superpowers of both Encodable and Decodable. 🦸‍♀️🦸‍♂️


Step 2: Decode the JSON Data 🧬


Next, let’s pretend our app received the following JSON data from an API:

[
    {
        "name": "Earth",
        "distanceFromSun": 1.0
    },
    {
        "name": "Mars",
        "distanceFromSun": 1.524
    }
]

To decode this JSON data into an array of Planet objects, we'll use the JSONDecoder class.

let jsonData = """
[
    {
        "name": "Earth",
        "distanceFromSun": 1.0
    },
    {
        "name": "Mars",
        "distanceFromSun": 1.524
    }
]
""".data(using: .utf8)!

do {
    let decoder = JSONDecoder()
    let planets = try decoder.decode([Planet].self, from: jsonData)
    print(planets) // 🌍 Mars, anyone?
} catch {
    print("Error decoding JSON: \(error)")
}

And just like that, we’ve decoded our JSON data into an array of Planet objects! 🌍🚀


Step 3: Encode the Swift Object as JSON 📦


Now let’s say we want to send some data back to the API. We can easily convert our Planet objects into JSON data using the JSONEncoder class.

let planets = [
    Planet(name: "Earth", distanceFromSun: 1.0),
    Planet(name: "Mars", distanceFromSun: 1.524)
]

do {
    let encoder = JSONEncoder()
    let jsonData = try encoder.encode(planets)
    if let jsonString = String(data: jsonData, encoding: .utf8) {
        print(jsonString) // 🌍 Back to JSON!
    }
} catch {
    print("Error encoding JSON: \(error)")
}

And there you have it — our Swift Planet objects have been encoded back into JSON data, ready to be sent off to the API! 🚀


Codable: The Hero We Deserve 🦸


As you can see, Codable, along with its sidekicks Encodable and Decodable, makes handling JSON data in Swift as easy as pie. 🥧 No more tedious JSON parsing — just sit back and let Codable work its magic! ✨

We hope you enjoyed this fun and informative journey into the world of Codable, Encodable, and Decodable in Swift. If you found it helpful, don’t forget to share it with your fellow Swift developers.

They’ll thank you for it! 🤗

And remember, practice makes perfect. Keep experimenting with Codable, and you’ll become a JSON whisperer in no time! 🔮

5 views0 comments

Recent Posts

See All

Comments


bottom of page