Swift Academy · Lektion

URLSession data(from:) mit async/await

Rufen Sie Daten asynchron aus REST-APIs mit der modernen URLSession-API ab.

Lektion 1 von 413 Schritte

URLSession data(from:) mit async/await ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Moderne URLSession-API

Swift 5.5+ stellt für URLSession asynchrone Überladungen bereit: data(from:delegate:) setzt die Ausführung aus, statt Callbacks zu verwenden.

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

Vollständige Fetch-Funktion

Kapseln Sie den Aufruf in einer asynchronen Funktion, die Fehler wirft, damit sie sich kombinieren und testen lässt.

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)
}

Aus SwiftUI aufrufen

Rufen Sie asynchrone Funktionen aus dem .task-Modifier oder aus Task { } innerhalb einer Button-Aktion auf.

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 für benutzerdefinierte Header

Erstellen Sie einen URLRequest mit Methode, Headern und Body und übergeben Sie ihn anschließend an 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)

HTTP-Status prüfen

Wandeln Sie die Antwort in HTTPURLResponse um und überprüfen Sie den Statuscode, bevor Sie sie decodieren.

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)

Abbrechen

Das Abbrechen des übergeordneten Task bricht automatisch die laufende URLSession-Anfrage ab.

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

Daten hochladen

Verwenden Sie upload(for:from:), um Binärdaten oder Formulardaten asynchron per POST hochzuladen.

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

Dateien herunterladen

download(from:) lädt eine Datei in eine temporäre URL auf der Festplatte herunter, statt sie in den Speicher zu 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)

Benutzerdefinierte URLSession-Konfiguration

Erstellen Sie eine benutzerdefinierte Session mit Timeouts, einer Caching-Richtlinie und Unterstützung für Hintergrundausführung.

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

async bytes für Streaming

Verwenden Sie bytes(from:), um Antwortdaten zeilenweise zu streamen, ohne die gesamte Antwort zwischenzuspeichern.

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

Mit URLProtocol testen

Simulieren Sie Netzwerkantworten in Tests, indem Sie URLProtocol ableiten und es in eine benutzerdefinierte Session-Konfiguration injizieren.

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

Kurze Überprüfung

Welche asynchrone URLSession-Methode lädt eine URL-Antwort direkt in eine temporäre Datei auf der Festplatte herunter?

Zusammenfassung der Lektion

Verwenden Sie URLSession.shared.data(from:) für asynchrone GET-Anfragen, data(for:) mit einem benutzerdefinierten URLRequest für POST/PUT, download(from:) für Dateidownloads und bytes(from:) für Streaming. Überprüfen Sie immer den HTTP-Statuscode, bevor Sie die Antwort decodieren.

Kostenlos starten

Lerne Swift mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
122
Lektionen
409

Häufig gestellte Fragen

Ist die Lektion „URLSession data(from:) mit async/await“ kostenlos?

Ja — der vollständige Text von „URLSession data(from:) mit async/await“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „URLSession data(from:) mit async/await“?

Rufen Sie Daten asynchron aus REST-APIs mit der modernen URLSession-API ab. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „URLSession data(from:) mit async/await“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. URLSession data(from:) mit async/await
  2. Codable: JSON kodieren und dekodieren
  3. Fehlerbehandlung und HTTP-Statuscodes
  4. Wiederholungslogik und Hintergrund-URLSession
← Zurück zu Swift Academy