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.

TaskBest forData handling
dataTaskAPI calls, small responsesIn memory
downloadTaskFiles, large responsesWritten to disk
uploadTaskSending files/dataStreams 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 }