URLSession data(from:) avec async/await
Récupérer des données de manière asynchrone depuis des API REST avec l’API URLSession moderne.
URLSession data(from:) avec async/await est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.
API URLSession moderne
Swift 5.5 ou version ultérieure fournit des surcharges asynchrones de URLSession : data(from:delegate:), qui suspendent l’exécution au lieu d’utiliser des fonctions de rappel.
let (data, response) = try await URLSession.shared.data(from: URL(string: "https://api.example.com/items")!)Fonction complète de récupération
Encapsulez l’appel dans une fonction asynchrone pouvant lever des erreurs afin de la rendre composable et testable.
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)
}Appel depuis SwiftUI
Appelez les fonctions asynchrones depuis le modificateur .task ou depuis Task { } dans l’action d’un bouton.
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 pour les en-têtes personnalisés
Construisez un URLRequest avec une méthode, des en-têtes et un corps, puis transmettez-le à 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)Vérification de l’état HTTP
Convertissez la réponse en HTTPURLResponse et vérifiez le code d’état avant le décodage.
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)Annulation
L’annulation de la Task parente annule automatiquement la requête URLSession en cours.
let task = Task {
let items = try await fetchItems()
// ...
}
task.cancel() // cancels URLSession request if in-flightTéléversement de données
Utilisez upload(for:from:) pour téléverser de manière asynchrone des données binaires ou des formulaires via POST.
var request = URLRequest(url: uploadURL)
request.httpMethod = "POST"
let (data, _) = try await URLSession.shared.upload(for: request, from: imageData)Téléchargement de fichiers
download(from:) télécharge un fichier vers une URL temporaire sur le disque au lieu de le charger en mémoire.
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)Configuration personnalisée de URLSession
Créez une session personnalisée avec des délais d’attente, une politique de mise en cache et la prise en charge de l’exécution en arrière-plan.
let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = 30
config.requestCachePolicy = .reloadIgnoringLocalCacheData
let session = URLSession(configuration: config)bytes asynchrones pour la diffusion en continu
Utilisez bytes(from:) pour diffuser les données de la réponse ligne par ligne sans mettre toute la réponse en mémoire tampon.
let (stream, _) = try await URLSession.shared.bytes(from: url)
for try await line in stream.lines {
print(line)
}Tests avec URLProtocol
Simulez les réponses réseau dans les tests en créant une sous-classe de URLProtocol et en l’injectant dans une configuration de session personnalisée.
class MockURLProtocol: URLProtocol {
static var requestHandler: ((URLRequest) throws -> (HTTPURLResponse, Data))?
// override canInit, startLoading, stopLoading
}Vérification rapide
Quelle méthode asynchrone de URLSession télécharge la réponse d’une URL directement vers un fichier temporaire sur le disque ?
Récapitulatif de la leçon
Utilisez URLSession.shared.data(from:) pour les requêtes GET asynchrones, data(for:) avec un URLRequest personnalisé pour POST et PUT, download(from:) pour les téléchargements de fichiers et bytes(from:) pour la diffusion en continu. Vérifiez toujours le code d’état HTTP avant le décodage.
Questions Fréquemment Posées
La leçon « URLSession data(from:) avec async/await » est-elle gratuite ?
Oui — le texte complet de « URLSession data(from:) avec async/await » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « URLSession data(from:) avec async/await » ?
Récupérer des données de manière asynchrone depuis des API REST avec l’API URLSession moderne. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Swift Academy ?
Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « URLSession data(from:) avec async/await » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?
Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- URLSession data(from:) avec async/await
- Codable : encoder et décoder du JSON
- Gestion des erreurs et codes d’état HTTP
- Logique de nouvelle tentative et URLSession en arrière-plan