Browse Questions
- @ViewBuilder is a result builder that lets you write multiple views inside a closure and have them composed into a single view.
- Combine is Apple's reactive framework for processing asynchronous events over time.
- All three create URLSessionTask subclasses but handle data differently.
- - Serial queue — executes tasks one at a time, in order.
Answer:
All three create URLSessionTask subclasses but handle data differently.
| Task | Best for | Data handling |
|---|---|---|
dataTask | API calls, small responses | In memory |
downloadTask | Files, large responses | Written to disk |
uploadTask | Sending files/data | Streams from memory or file |
Code Example:
// dataTask — API response stays in memory
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data else { return }
let user = try? JSONDecoder().decode(User.self, from: data)
}
// downloadTask — saves to temp file, survives memory pressure
URLSession.shared.downloadTask(with: url) { tempURL, response, error in
guard let tempURL = tempURL else { return }
let dest = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
try? FileManager.default.moveItem(at: tempURL, to: dest.appendingPathComponent("video.mp4"))
}
// uploadTask — send a file
var request = URLRequest(url: uploadURL)
request.httpMethod = "POST"
URLSession.shared.uploadTask(with: request, fromFile: fileURL) { data, response, error in }