Programmation asynchrone
Programmation asynchrone
Cependant, il y a un cas de figure que nous voulons absolument éviter, si l’appel de ces données est lent, la réception sur notre application le sera également. Ça pourrait vite impatienter nos utilisateurs. C’est là qu’intervient l’asynchrone. Cette technique permet à notre programme de ne pas être bloqué dans l’attente de données.
En utilisant l’asynchrone, nous pouvons continuer à exécuter d’autres tâches pendant que les données sont récupérées en arrière-plan. Ca améliore considérablement l’expérience utilisateur en rendant notre application plus réactive et fluide.
Introduction à l’asynchrone
Comme on vient de le voir, l’asynchrone permet d’exécuter des tâches en arrière-plan sans bloquer le fil principal de l’application. C’est essentiel pour les opérations qui peuvent prendre du temps, comme le téléchargement de données sur Internet, la lecture de fichiers ou le traitement de grandes quantités de données.
Concepts de base
Background Threads (Fils de Fond) Des fils séparés utilisés pour effectuer des tâches longues ou intensives en arrière-plan.
Grand Central Dispatch (GCD)
Grand Central Dispatch (GCD) est une technologie intégrée dans Swift qui permet de gérer efficacement l’exécution de tâches asynchrones. Son but principal est de permettre l’exécution de code en parallèle. Voici quelques concepts clés pour mieux comprendre GCD :
Queues (Files d’attente) Les queues sont des lignes où les tâches sont placées pour être exécutées. GCD utilise deux types principaux de queues :
→ Main Queue (File Principale) C’est la queue principale qui gère les mises à jour de l’interface utilisateur. Les tâches placées ici sont exécutées sur le fil principal.
→ Global Queues (Files Globales) Ce sont des queues concurrentes qui gèrent les tâches de fond. Elles sont utilisées pour des opérations intensives en calcul ou pour des tâches d’entrée/sortie comme le téléchargement de données.
Async (Asynchrone) Lorsque tu place une tâche dans une queue en mode asynchrone, cette tâche sera exécutée en arrière-plan sans bloquer le fil principal.
Exemple d’utilisation de GCD
Voici un exemple simple pour illustrer comment utiliser GCD pour exécuter une tâche en arrière-plan et mettre à jour l’interface utilisateur une fois la tâche terminée :
DispatchQueue.global(qos: .background).async {
for i in 1...5 {
print("Tâche en arrière-plan \(i)")
sleep(1)
}
DispatchQueue.main.async {
print("Tâche terminée, mise à jour de l'interface utilisateur.")
}
}
Dans cet exemple :
→ Nous utilisons <span style="color: #1f1f24;"><strong>DispatchQueue.global(qos: .background).async</strong></span> pour exécuter une tâche en arrière-plan.
→ Une fois la tâche de fond terminée, nous utilisons DispatchQueue.main.async pour revenir sur le fil principal et mettre à jour l’interface utilisateur.
PS: La fonction sleep est utilisée pour mettre en pause l’exécution d’un programme pendant une période de temps spécifiée.
Async/Await
Avec Swift 5.5, le langage a introduit les mots-clés async et await pour simplifier la gestion des tâches asynchrones.
func fetchData() async throws -> String {
sleep(2)
return "Données téléchargées"
}
@main
struct MyApp {
static func main() async {
do {
let data = try await fetchData()
print(data)
} catch {
print("Erreur: \(error)")
}
}
}
async
Le mot-clé async est utilisé pour déclarer qu’une fonction ou une méthode est asynchrone. Cela signifie que cette fonction peut exécuter des opérations qui prennent du temps sans bloquer le fil d’exécution sur lequel elle a été appelée.
await
Le mot-clé await est utilisé pour appeler une fonction asynchrone et attendre son résultat sans bloquer le fil d’exécution. Il permet d’écrire du code asynchrone de manière séquentielle, ce qui le rend plus facile à lire et à maintenir.
Conclusion
Si tu es arrivé jusqu’ici, félicitations 🎉🍾🥂🎊👏, tu viens de terminer les fondamentaux de Swift.
Il reste encore plein de choses à apprendre sur ce langage, tu les apprendras au fur et à mesure de tes programmes en étant confronté à certaines problématiques.
Si tu dois garder une chose en tête, c’est d’être un maximum autonome dans ton apprentissage, apprendre à apprendre, savoir chercher par soi-même les réponses à nos problèmes est le cœur de notre métier de développeur.
Je t’encourage d’ailleurs à pratiquer un maximum pour bien t’approprier le langage, surtout en Swift natif. Maîtriser un langage, c’est mieux comprendre les frameworks que tu vas utiliser par la suite.
Pour conclure, tu retrouveras de temps à autre de nouveaux cours sur Pixel Swift, où nous aborderons des notions ciblées comme les appels API. Et enfin, quand tu es prêt, tu peux aller voir du côté de SwiftUI et commencer à créer de belles applications .