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
✗ Incorrect
The Codable protocol combines Encodable and Decodable for easy JSON encoding and decoding.
What does JSONDecoder do?
AConverts Swift objects to JSON data
BConverts JSON data to Swift objects
CValidates JSON syntax
DEncrypts JSON data
✗ Incorrect
JSONDecoder converts JSON data into Swift objects.
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
✗ Incorrect
Defining a CodingKeys enum lets you map property names to custom keys.
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
✗ Incorrect
Use JSONEncoder().encode() to convert the struct to JSON data.
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
✗ Incorrect
If the property is optional, it becomes nil; otherwise decoding fails.
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
Step 1: Understand Codable's role
The Codable protocol allows Swift types to be encoded to and decoded from external representations like JSON.
Step 2: Compare with other options
Options B, C, and D relate to UI, memory, and networking, which are unrelated to Codable.
Final Answer:
To enable easy encoding and decoding of data to formats like JSON -> Option B
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
Step 1: Check Codable conformance
To support both encoding and decoding, the struct must conform to Codable, which combines Encodable and Decodable.
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.
Final Answer:
struct User: Codable { var name: String; var age: Int } -> Option A
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
Step 1: Decode JSON string to Person
The JSON string matches the Person struct keys and types, so decoding succeeds.
Step 2: Print the name property
Since decoding succeeds, person.name is "Anna", which is printed.
Final Answer:
Anna -> Option A
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
Step 1: Compare JSON keys with struct properties
The JSON has key "title" but the struct expects "name"; this mismatch causes decoding to fail.
Step 2: Check other code parts
The struct conforms to Codable, JSON is valid, and decoder is correctly initialized, so no issues there.
Final Answer:
The JSON key "title" does not match the struct property "name" -> Option C
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
Step 1: Understand default Codable behavior
By default, JSONEncoder encodes optional properties as null if nil, not omitting them.
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.
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.
Final Answer:
Use a custom encode(to:) method to skip encoding nil properties -> Option D
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 unknownstrongwhile earning +1 Grip toward your certificate.