Swift Academy · Les

URLSession data(from:) met async/await

Asynchroon gegevens ophalen uit REST-API's met de moderne URLSession-API.

Les 1 van 413 stappen

URLSession data(from:) met async/await is een gratis Swift Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Swift Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Swift Academy bevat in totaal 4 lessen.

Moderne URLSession-API

Swift 5.5+ bevat asynchrone overloads voor URLSession: data(from:delegate:) die worden onderbroken in plaats van callbacks te gebruiken.

let (data, response) = try await URLSession.shared.data(from: URL(string: "https://api.example.com/items")!)

Volledige ophaalfunctie

Omring de aanroep met een asynchrone functie die fouten kan doorgeven, zodat je deze kunt samenstellen en testen.

func fetchItems() async throws -> [Item] {
  let url = URL(string: "https://api.example.com/items")!
  let (data, _) = try await URLSession.shared.data(from: url)
  return try JSONDecoder().decode([Item].self, from: data)
}

Aanroepen vanuit SwiftUI

Roep asynchrone functies aan vanuit de modifier .task of vanuit Task { } in een knopactie.

struct ItemList: View {
  @State private var items: [Item] = []
  var body: some View {
    List(items, id: \.id) { Text($0.name) }
      .task { items = (try? await fetchItems()) ?? [] }
  }
}

URLRequest voor aangepaste headers

Maak een URLRequest met een methode, headers en hoofdtekst en geef deze vervolgens door aan data(for:).

var request = URLRequest(url: URL(string: "https://api.example.com/login")!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONEncoder().encode(LoginBody(email: "a@b.com", password: "pass"))
let (data, _) = try await URLSession.shared.data(for: request)

De HTTP-status controleren

Zet het antwoord om naar HTTPURLResponse en controleer de statuscode voordat je decodeert.

let (data, response) = try await URLSession.shared.data(from: url)
guard let http = response as? HTTPURLResponse, http.statusCode == 200 else {
  throw URLError(.badServerResponse)
}
let item = try JSONDecoder().decode(Item.self, from: data)

Annuleren

Wanneer je de bovenliggende Task annuleert, wordt de actieve URLSession-aanvraag automatisch geannuleerd.

let task = Task {
  let items = try await fetchItems()
  // ...
}
task.cancel() // cancels URLSession request if in-flight

Gegevens uploaden

Gebruik upload(for:from:) om binaire gegevens of formulieruploads asynchroon te versturen.

var request = URLRequest(url: uploadURL)
request.httpMethod = "POST"
let (data, _) = try await URLSession.shared.upload(for: request, from: imageData)

Bestanden downloaden

download(from:) downloadt een bestand naar een tijdelijke URL op de schijf in plaats van het in het geheugen te laden.

let (fileURL, _) = try await URLSession.shared.download(from: remoteURL)
let destURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("file.pdf")
try FileManager.default.moveItem(at: fileURL, to: destURL)

Aangepaste URLSession-configuratie

Maak een aangepaste sessie met time-outs, een cachingbeleid en ondersteuning voor achtergrondwerking.

let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = 30
config.requestCachePolicy = .reloadIgnoringLocalCacheData
let session = URLSession(configuration: config)

async bytes voor streaming

Gebruik bytes(from:) om antwoordgegevens regel voor regel te streamen zonder het volledige antwoord te bufferen.

let (stream, _) = try await URLSession.shared.bytes(from: url)
for try await line in stream.lines {
  print(line)
}

Testen met URLProtocol

Simuleer netwerkantwoorden in tests door van URLProtocol een subklasse te maken en deze in een aangepaste sessieconfiguratie te injecteren.

class MockURLProtocol: URLProtocol {
  static var requestHandler: ((URLRequest) throws -> (HTTPURLResponse, Data))?
  // override canInit, startLoading, stopLoading
}

Snelle controle

Welke asynchrone URLSession-methode downloadt een URL-antwoord rechtstreeks naar een tijdelijk bestand op de schijf?

Samenvatting van de les

Gebruik URLSession.shared.data(from:) voor asynchrone GET-aanvragen, data(for:) met een aangepaste URLRequest voor POST/PUT, download(from:) voor bestandsdownloads en bytes(from:) voor streaming. Controleer altijd de HTTP-statuscode voordat je decodeert.

Gratis beginnen

Leer Swift met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
122
Lessen
409

Veelgestelde vragen

Is de les “URLSession data(from:) met async/await” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Swift Academy, waaronder “URLSession data(from:) met async/await”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Swift Academy bevat in totaal 4 lessen.

Wat leer ik in “URLSession data(from:) met async/await”?

Asynchroon gegevens ophalen uit REST-API's met de moderne URLSession-API. Je oefent met Swift Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Swift Academy te beginnen?

Ervaring vooraf is niet nodig. Swift Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “URLSession data(from:) met async/await”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Swift Academy?

Ja. Elke les over Swift Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. URLSession data(from:) met async/await
  2. Codable: JSON coderen en decoderen
  3. Foutafhandeling en HTTP-statuscodes
  4. Retrylogica en URLSession op de achtergrond
← Terug naar Swift Academy