Swift Academy · Leçon

Migrer vers la concurrence stricte

Adoptez progressivement la vérification de la concurrence de Swift 6.

Leçon 4 sur 413 étapes

Migrer vers la concurrence stricte est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 4 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.

Qu'est-ce que la concurrence stricte ?

La vérification stricte de la concurrence demande au compilateur de diagnostiquer chaque course de données potentielle lors de la compilation.

En mode de langage Swift 6, elle est activée par défaut ; en mode Swift 5, vous l'activez progressivement.

Les trois niveaux de vérification

L'option -strict-concurrency comporte trois niveaux : minimal (par défaut dans Swift 5), targeted (vérifie le code qui utilise déjà la concurrence) et complete (vérification complète de style Swift 6).

// Build settings example
// SWIFT_STRICT_CONCURRENCY = complete

Adoption progressive

La méthode recommandée consiste à gravir progressivement les niveaux : commencez par targeted, corrigez les avertissements, puis passez à complete avant de basculer le mode de langage vers la version 6.

Cette approche rend la migration gérable dans les grandes bases de code.

// Step 1: targeted
// Step 2: complete (warnings)
// Step 3: Swift 6 mode (errors)

Migration module par module

La concurrence stricte est définie pour chaque target. Vous pouvez migrer un module à la fois et laisser les autres en mode Swift 5 jusqu'à ce qu'ils soient prêts.

// Package.swift target
// swiftSettings: [.enableExperimentalFeature("StrictConcurrency")]

Avertissement courant : capture non transférable

Le diagnostic le plus fréquent concerne la capture d'une valeur non-Sendable dans une Task ou sa transmission au-delà d'une frontière entre acteurs.

Pour corriger cela, rendez le type transférable ou ne copiez que les données transférables.

final class Model { var name = "" }
func start(_ m: Model) {
    // Warning: non-Sendable Model captured by Task
    // Task { print(m.name) }
}

Correction avec des types valeur

Souvent, la correction la plus propre consiste à modéliser les données comme un type valeur immuable, qui est automatiquement transférable.

struct Model: Sendable { let name: String }
func start(_ m: Model) {
    Task { print(m.name) } // safe now
}

Correction avec @MainActor

Les types d'interface utilisateur déclenchent fréquemment des avertissements, car ils sont utilisés depuis des tâches en arrière-plan. Annoter le type avec @MainActor le rattache au fil d'exécution principal et résout les avertissements.

@MainActor
final class ViewModel {
    var items: [String] = []
    func reload() async {
        let fetched = await load()
        items = fetched
    }
}
func load() async -> [String] { [] }

Conformité à Sendable pour les types existants

Pour les types que vous contrôlez et qui sont déjà sûrs en contexte concurrent, ajoutez explicitement la conformité à Sendable ou @unchecked Sendable afin de faire disparaître honnêtement les avertissements.

import Foundation
final class Counter: @unchecked Sendable {
    private let lock = NSLock()
    private var n = 0
}

Importations avec @preconcurrency

Lorsqu'une dépendance n'a pas encore annoté son API, @preconcurrency import assouplit les vérifications pour ce module et transforme les erreurs en avertissements jusqu'à sa mise à jour.

@preconcurrency import SomeLegacyFramework

Marquer les symboles avec @preconcurrency

Vous pouvez également marquer des déclarations individuelles avec @preconcurrency, afin que les appelants provenant d'un ancien code n'obtiennent pas d'erreurs lorsque vous ajoutez des exigences de transférabilité.

@preconcurrency
func handle(_ value: Sendable) { }

Vérifier la migration

Lorsque la vérification complete ne produit plus aucun avertissement, basculez la cible en mode Swift 6 afin que les garanties deviennent des erreurs obligatoires et ne puissent pas régresser.

// Package.swift
// .target(name: "App", swiftSettings: [.swiftLanguageMode(.v6)])

Vérification rapide : migration

Vérifiez votre compréhension de la migration vers la concurrence stricte.

Récapitulatif : migrer vers la concurrence stricte

La vérification stricte de la concurrence déplace la détection des courses de données vers la compilation, avec les niveaux minimal, targeted et complete. Migrez module par module, corrigez les captures non transférables avec des types valeur, @MainActor ou une conformité honnête à Sendable, et utilisez @preconcurrency pour faciliter l'interopérabilité avec les dépendances non migrées.

Une fois que complete ne produit plus aucun avertissement, activez le mode Swift 6 pour verrouiller ces garanties.

Gratuit pour commencer

Apprends Swift avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
122
Leçons
409

Questions Fréquemment Posées

La leçon « Migrer vers la concurrence stricte » est-elle gratuite ?

Oui — le texte complet de « Migrer vers la concurrence stricte » 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 « Migrer vers la concurrence stricte » ?

Adoptez progressivement la vérification de la concurrence de Swift 6. 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 4 sur 4.

Combien de temps prend la leçon « Migrer vers la concurrence stricte » ?

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

  1. Le problème des courses de données
  2. Le protocole Sendable
  3. Isolation des acteurs et nonisolated
  4. Migrer vers la concurrence stricte
← Retour à Swift Academy