A POST request sends data from the app to a server, often to create or update information. It's like sending a letter with details to someone who will process it.
Click to reveal answer
beginner
How do you add a JSON body to a POST request in Swift?
You create a dictionary with your data, convert it to JSON using JSONSerialization, then set it as the HTTP body of the URLRequest.
Click to reveal answer
beginner
Why do you need to set the 'Content-Type' header to 'application/json' in a POST request?
It tells the server that the data sent is in JSON format, so the server knows how to read it correctly.
Click to reveal answer
beginner
What Swift class is used to make HTTP requests?
URLSession is used to create tasks that send and receive data over the network.
Click to reveal answer
beginner
What is the role of URLRequest in making a POST request?
URLRequest holds the URL, HTTP method, headers, and body data for the request before sending it with URLSession.
Click to reveal answer
Which HTTP method is used to send data to a server to create or update resources?
APOST
BGET
CDELETE
DPUT
✗ Incorrect
POST is used to send data to the server, often to create or update resources.
In Swift, which class is responsible for sending network requests?
ADataTask
BURLRequest
CJSONSerialization
DURLSession
✗ Incorrect
URLSession manages network tasks like sending requests and receiving responses.
What must you set in the HTTP headers to indicate the body contains JSON data?
AAuthorization: Bearer token
BAccept: text/html
CContent-Type: application/json
DContent-Length: 0
✗ Incorrect
Setting 'Content-Type' to 'application/json' tells the server the body is JSON.
How do you convert a Swift dictionary to JSON data for the request body?
JSONSerialization converts dictionaries to JSON Data for the HTTP body.
Which property of URLRequest sets the HTTP method like POST or GET?
AhttpMethod
Burl
ChttpBody
DallHTTPHeaderFields
✗ Incorrect
The httpMethod property defines the HTTP method for the request.
Explain step-by-step how to create and send a POST request with a JSON body in Swift.
Think about preparing the request, adding data, and sending it.
You got /7 concepts.
Why is it important to handle errors when sending a POST request in a mobile app?
Consider what can go wrong when talking to a server.
You got /5 concepts.
Practice
(1/5)
1. What is the main purpose of a POST request with a JSON body in iOS Swift networking?
easy
A. To send data to a server, usually to create or update resources
B. To retrieve data from a server without sending any data
C. To delete data from a server
D. To open a WebSocket connection
Solution
Step 1: Understand HTTP methods
POST requests are used to send data to a server, often to create or update something.
Step 2: Recognize JSON role
JSON is a format to structure the data sent in the body of the POST request.
Final Answer:
To send data to a server, usually to create or update resources -> Option A
Quick Check:
POST sends data = A [OK]
Hint: POST means send data to server, not just get [OK]
Common Mistakes:
Confusing POST with GET method
Thinking POST is for deleting data
Ignoring the role of JSON in the body
2. Which Swift code snippet correctly sets the HTTP method to POST and adds a JSON Content-Type header?
easy
A. request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
B. request.method = "POST"
request.addHeader("Content-Type", value: "application/json")
C. request.httpMethod = POST
request.setHeader("Content-Type", "application/json")
D. request.method = POST
request.setValue("json", forHTTPHeaderField: "Content-Type")
Solution
Step 1: Set HTTP method correctly
The property to set HTTP method in URLRequest is httpMethod and it expects a String like "POST".
Step 2: Add JSON Content-Type header properly
Use setValue(_:forHTTPHeaderField:) with "application/json" for the "Content-Type" header.
Final Answer:
request.httpMethod = "POST"\nrequest.setValue("application/json", forHTTPHeaderField: "Content-Type") -> Option A
Quick Check:
Correct method and header syntax = A [OK]
Hint: Use request.httpMethod and setValue for headers [OK]
Common Mistakes:
Using wrong property names like method or setHeader
Forgetting quotes around "POST"
Using incorrect header field names or values
3. Given the Swift code below, what will be the printed output?
let url = URL(string: "https://example.com/api")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let jsonBody = ["name": "Alice", "age": 30] as [String : Any]
request.httpBody = try? JSONSerialization.data(withJSONObject: jsonBody)
print(String(data: request.httpBody!, encoding: .utf8)!)
medium
A. ["name": "Alice", "age": 30]
B. {"name":"Alice","age":30}
C. Optional({"name":"Alice","age":30})
D. nil
Solution
Step 1: Serialize dictionary to JSON data
JSONSerialization.data converts the dictionary to JSON data bytes representing {"name":"Alice","age":30}.
Step 2: Convert data to UTF-8 string
Printing the data as UTF-8 string shows the JSON string without brackets or Optional wrapper.
Final Answer:
{"name":"Alice","age":30} -> Option B
Quick Check:
JSONSerialization outputs JSON string = B [OK]
Hint: JSONSerialization outputs JSON string, not Swift dictionary syntax [OK]
Common Mistakes:
Expecting Swift dictionary syntax instead of JSON string
Printing Optional wrapper
Forgetting to unwrap data or encoding
4. Identify the error in this Swift code for sending a POST request with JSON body:
var request = URLRequest(url: URL(string: "https://api.example.com")!)
request.httpMethod = "POST"
let json = ["key": "value"]
request.httpBody = try? JSONSerialization.jsonObject(with: json)
medium
A. httpMethod should be lowercase "post"
B. Missing setting Content-Type header to application/json
C. Using JSONSerialization.jsonObject instead of data(withJSONObject:)
D. URLRequest initialization is incorrect
Solution
Step 1: Check JSON serialization method
jsonObject(with:) parses JSON data to object; to create JSON data from object, use data(withJSONObject:).
Step 2: Confirm other parts
Content-Type header missing is an issue but not the main error causing failure here.
Final Answer:
Using JSONSerialization.jsonObject instead of data(withJSONObject:) -> Option C
Quick Check:
Wrong JSON method used = D [OK]
Hint: Use data(withJSONObject:) to create JSON data, not jsonObject(with:) [OK]
Common Mistakes:
Confusing jsonObject(with:) with data(withJSONObject:)
Forgetting Content-Type header
Incorrect URLRequest initialization
5. You want to send a POST request with a JSON body containing user info, but only include the "email" field if it is not empty. Which Swift code snippet correctly creates the JSON body for this conditional inclusion?
hard
A. var jsonBody = ["name": "Bob", "email": email]
if !email.isEmpty {
jsonBody.removeValue(forKey: "email")
}
request.httpBody = try? JSONSerialization.data(withJSONObject: jsonBody)
B. let jsonBody = ["name": "Bob", "email": email.isEmpty ? nil : email]
request.httpBody = try? JSONSerialization.data(withJSONObject: jsonBody)
C. let jsonBody = ["name": "Bob"]
if email != "" {
jsonBody["email"] = email
}
request.httpBody = try? JSONSerialization.data(withJSONObject: jsonBody)
D. var jsonBody = ["name": "Bob"]
if !email.isEmpty {
jsonBody["email"] = email
}
request.httpBody = try? JSONSerialization.data(withJSONObject: jsonBody)
Solution
Step 1: Understand conditional dictionary update
var jsonBody = ["name": "Bob"]
if !email.isEmpty {
jsonBody["email"] = email
}
request.httpBody = try? JSONSerialization.data(withJSONObject: jsonBody) creates a mutable dictionary and adds "email" only if not empty, which is correct.
Step 2: Check other options for errors
let jsonBody = ["name": "Bob", "email": email.isEmpty ? nil : email]
request.httpBody = try? JSONSerialization.data(withJSONObject: jsonBody) uses nil in dictionary literal which is invalid; var jsonBody = ["name": "Bob", "email": email]
if !email.isEmpty {
jsonBody.removeValue(forKey: "email")
}
request.httpBody = try? JSONSerialization.data(withJSONObject: jsonBody) uses inverted condition, removing email when it is not empty, incorrect; let jsonBody = ["name": "Bob"]
if email != "" {
jsonBody["email"] = email
}
request.httpBody = try? JSONSerialization.data(withJSONObject: jsonBody) tries to mutate immutable dictionary.
Final Answer:
var jsonBody = ["name": "Bob"]\nif !email.isEmpty {\n jsonBody["email"] = email\n}\nrequest.httpBody = try? JSONSerialization.data(withJSONObject: jsonBody) -> Option D
Quick Check:
Mutable dict + conditional add = C [OK]
Hint: Use var dictionary and add keys conditionally [OK]
Common Mistakes:
Using let dictionary and trying to mutate it
Including nil values in dictionary literal
Adding then removing keys instead of conditional add
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.