Working with Codable in Swift allows you to easily encode and decode your custom data types to and from various formats such as JSON, Property Lists, etc. Here’s a guide on how to work with Codable for data serialization:

  1. Define Codable Data Models:
    • Define your custom data models by conforming them to the Codable protocol. This involves specifying the properties you want to encode and decode.
struct Person: Codable {
    var name: String
    var age: Int
}

Encoding Data:

  • Use JSONEncoder to encode your Codable data models into JSON data.
let person = Person(name: "John", age: 30)
do {
    let jsonData = try JSONEncoder().encode(person)
    // Handle encoded data
} catch {
    print("Error encoding data: \(error)")
}

Decoding Data:

  • Use JSONDecoder to decode JSON data into your Codable data models.
let jsonData = Data(...) // JSON data obtained from somewhere
do {
    let decodedPerson = try JSONDecoder().decode(Person.self, from: jsonData)
    // Handle decoded person object
} catch {
    print("Error decoding data: \(error)")
}
  1. Handling Errors:
    • Always handle errors when encoding or decoding data to ensure robustness.
  2. Customizing Encoding and Decoding:
    • You can customize encoding and decoding behavior by implementing Codable methods like encode(to:) and init(from:), especially useful for handling nested or non-standard data structures.
struct Book: Codable {
    var title: String
    var author: String

    enum CodingKeys: String, CodingKey {
        case title = "bookTitle"
        case author
    }

    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        title = try container.decode(String.self, forKey: .title)
        author = try container.decode(String.self, forKey: .author)
    }

    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(title, forKey: .title)
        try container.encode(author, forKey: .author)
    }
}
  1. Supporting Different Data Formats:
    • Codable supports not only JSON but also other formats like Property Lists. You can use PropertyListEncoder and PropertyListDecoder similarly to JSONEncoder and JSONDecoder.
  2. Testing:
    • Test your encoding and decoding logic thoroughly with various data scenarios to ensure correctness and stability.