Bird
Raised Fist0
Swiftprogramming~5 mins

Codable protocol for encoding/decoding in Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the Codable protocol in Swift?
The Codable protocol is a combination of Encodable and Decodable. It allows Swift types to be easily converted to and from external representations like JSON or Property Lists.
Click to reveal answer
beginner
How do you make a Swift struct conform to Codable?
You add Codable to the struct's declaration. For example:
struct User: Codable {
var name: String
var age: Int
}
Click to reveal answer
intermediate
What are the two main functions provided by Encodable and Decodable?
Encodable provides encode(to encoder: Encoder) to convert data to an external format.
Decodable provides init(from decoder: Decoder) to create an instance from external data.
Click to reveal answer
beginner
What Swift class is commonly used to encode and decode JSON data?
The <code>JSONEncoder</code> class is used to encode Swift types to JSON.<br>The <code>JSONDecoder</code> class is used to decode JSON data back into Swift types.
Click to reveal answer
intermediate
How can you customize the keys used during encoding and decoding?
You define an enum called CodingKeys inside your type that conforms to CodingKey. This enum maps your property names to the keys used in the encoded data.
Click to reveal answer
Which protocol must a Swift type conform to for automatic JSON encoding and decoding?
ACodable
BSerializable
CJSONRepresentable
DEncodableOnly
What does JSONDecoder do?
AConverts Swift objects to JSON data
BConverts JSON data to Swift objects
CValidates JSON syntax
DEncrypts JSON data
How do you specify custom keys for encoding properties?
ABy overriding <code>encode(to:)</code> only
BBy using <code>JSONEncoder.keyMapping</code>
CBy renaming the properties
DBy defining a <code>CodingKeys</code> enum
If a struct conforms to Codable, what must you do to encode it to JSON?
AManually write JSON strings
BCall <code>encode()</code> on the struct directly
CCall <code>JSONEncoder().encode()</code> with the struct instance
DUse <code>JSONSerialization</code> only
What happens if a property is missing in the JSON when decoding?
AThe property is set to nil if optional
BDecoding fails with an error
CThe property is ignored silently
DThe decoder fills it with default values automatically
Explain how the Codable protocol helps in encoding and decoding data in Swift.
Think about how you turn Swift objects into JSON and back.
You got /4 concepts.
    Describe how to customize the keys used when encoding a Swift struct to JSON.
    It's about telling Swift which names to use in JSON.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the Codable protocol in Swift?
      easy
      A. To create user interfaces quickly
      B. To enable easy encoding and decoding of data to formats like JSON
      C. To manage memory automatically
      D. To handle network requests

      Solution

      1. Step 1: Understand Codable's role

        The Codable protocol allows Swift types to be encoded to and decoded from external representations like JSON.
      2. Step 2: Compare with other options

        Options B, C, and D relate to UI, memory, and networking, which are unrelated to Codable.
      3. Final Answer:

        To enable easy encoding and decoding of data to formats like JSON -> Option B
      4. Quick Check:

        Codable = encoding/decoding data [OK]
      Hint: Codable means convert data to/from JSON easily [OK]
      Common Mistakes:
      • Confusing Codable with UI or networking protocols
      • Thinking Codable manages memory
      • Assuming Codable is for database operations
      2. Which of the following is the correct way to declare a struct that supports encoding and decoding using Codable?
      easy
      A. struct User: Codable { var name: String; var age: Int }
      B. struct User { var name: String; var age: Int }
      C. struct User: Encodable { var name: String; var age: Int }
      D. struct User: Decodable { var name: String; var age: Int }

      Solution

      1. Step 1: Check Codable conformance

        To support both encoding and decoding, the struct must conform to Codable, which combines Encodable and Decodable.
      2. Step 2: Analyze options

        struct User: Codable { var name: String; var age: Int } correctly uses : Codable. Options C and D only support encoding or decoding, not both. struct User { var name: String; var age: Int } has no conformance.
      3. Final Answer:

        struct User: Codable { var name: String; var age: Int } -> Option A
      4. Quick Check:

        Use Codable to encode and decode both ways [OK]
      Hint: Use Codable to encode and decode both ways [OK]
      Common Mistakes:
      • Using only Encodable or Decodable when both needed
      • Forgetting to add Codable conformance
      • Declaring struct without protocol conformance
      3. Given the following code, what will be printed?
      struct Person: Codable {
          var name: String
          var age: Int
      }
      
      let jsonData = "{\"name\": \"Anna\", \"age\": 30}".data(using: .utf8)!
      let decoder = JSONDecoder()
      if let person = try? decoder.decode(Person.self, from: jsonData) {
          print(person.name)
      } else {
          print("Failed to decode")
      }
      medium
      A. Anna
      B. Failed to decode
      C. 30
      D. nil

      Solution

      1. Step 1: Decode JSON string to Person

        The JSON string matches the Person struct keys and types, so decoding succeeds.
      2. Step 2: Print the name property

        Since decoding succeeds, person.name is "Anna", which is printed.
      3. Final Answer:

        Anna -> Option A
      4. Quick Check:

        Decoded name = Anna [OK]
      Hint: Match JSON keys exactly to struct properties [OK]
      Common Mistakes:
      • Mismatching JSON keys and struct properties
      • Not unwrapping optional data safely
      • Confusing print output with age value
      4. What is wrong with this code snippet that tries to decode JSON into a struct conforming to Codable?
      struct Product: Codable {
          var id: Int
          var name: String
      }
      
      let json = "{\"id\": 101, \"title\": \"Book\"}"
      let data = json.data(using: .utf8)!
      let decoder = JSONDecoder()
      let product = try? decoder.decode(Product.self, from: data)
      medium
      A. The JSON string is not valid JSON
      B. The struct does not conform to Codable
      C. The JSON key "title" does not match the struct property "name"
      D. The decoder is not initialized properly

      Solution

      1. Step 1: Compare JSON keys with struct properties

        The JSON has key "title" but the struct expects "name"; this mismatch causes decoding to fail.
      2. Step 2: Check other code parts

        The struct conforms to Codable, JSON is valid, and decoder is correctly initialized, so no issues there.
      3. Final Answer:

        The JSON key "title" does not match the struct property "name" -> Option C
      4. Quick Check:

        JSON keys must match struct properties exactly [OK]
      Hint: JSON keys must match struct property names exactly [OK]
      Common Mistakes:
      • Ignoring key name mismatches
      • Assuming decoder setup causes error
      • Not validating JSON format
      5. You want to encode a struct with an optional property that should be omitted from the JSON if it is nil. Which approach using Codable is correct?
      hard
      A. Declare the property as optional and use JSONEncoder's default behavior
      B. Use Decodable instead of Codable
      C. Make the property non-optional and assign a default value
      D. Use a custom encode(to:) method to skip encoding nil properties

      Solution

      1. Step 1: Understand default Codable behavior

        By default, JSONEncoder encodes optional properties as null if nil, not omitting them.
      2. Step 2: Use custom encoding to omit nil

        To omit nil optional properties, implement a custom encode(to:) method and encode only non-nil values.
      3. Step 3: Evaluate other options

        Declare the property as optional and use JSONEncoder's default behavior keeps nulls, C changes property type, B is unrelated to encoding.
      4. Final Answer:

        Use a custom encode(to:) method to skip encoding nil properties -> Option D
      5. Quick Check:

        Custom encode(to:) omits nil optionals [OK]
      Hint: Custom encode(to:) skips nil optionals in JSON [OK]
      Common Mistakes:
      • Expecting default encoder to omit nil optionals
      • Making optional properties non-optional unnecessarily
      • Confusing Decodable with encoding behavior
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard