Swift 6.1 : Toutes les nouveautés en détail
Publié le · Mis à jour le · 9 min
Six mois après la sortie majeure de Swift 6.0, Apple livre Swift 6.1 avec Xcode 16.3. Une mise à jour plus légère en apparence, mais qui apporte des améliorations de qualité de vie très attendues par la communauté. Tour d'horizon complet.
Ce qui change vraiment
Swift 6.1 n'est pas une révolution. C'est une release de consolidation qui corrige des frictions quotidiennes : moins de boilerplate dans la concurrence, plus de flexibilité syntaxique, et des outils de diagnostic enfin à la hauteur. Le genre de mise à jour qu'on apprécie au quotidien.
Voici les nouveautés principales :
Extension du mot-clé
nonisolatedaux types et extensionsSupport des trailing commas partout
Inférence de type automatique pour
TaskGroupPackage Traits pour la compilation conditionnelle
Nouvel attribut
@implementationpour l'interop Objective-CAméliorations de Swift Testing
Contrôle fin des diagnostics du compilateur
nonisolated étendu aux types et extensions
Jusqu'à Swift 6.0, nonisolated ne s'appliquait qu'aux propriétés et fonctions individuelles. Problème : quand vous avez un type marqué @MainActor mais que plusieurs membres n'ont pas besoin d'isolation, le code devient verbeux.
Swift 6.1 permet désormais de marquer un type entier ou une extension comme nonisolated.
Avant Swift 6.1
Avec Swift 6.1
Cette approche est particulièrement utile quand vous implémentez des protocoles qui n'ont pas besoin d'isolation sur un type qui en a une par défaut.
Trailing commas : enfin partout
La proposition SE-0439 étend le support des virgules finales à pratiquement tous les contextes du langage. Une demande de longue date de la communauté, particulièrement utile pour le refactoring et les diffs Git plus propres.
Là où ça fonctionne maintenant
Pourquoi c'est utile
Imaginez que vous devez commenter temporairement le dernier paramètre d'un appel :
Sans trailing comma, commenter la dernière ligne aurait causé une erreur de syntaxe.
TaskGroup : inférence de type automatique
Les TaskGroup nécessitaient jusqu'ici de spécifier explicitement le type de retour des tâches enfants. Swift 6.1 infère ce type automatiquement à partir de la première tâche ajoutée.
Avant Swift 6.1
Avec Swift 6.1
Le compilateur déduit le type User? à partir du retour de fetchUser(id:). Moins de boilerplate, même résultat.
Package Traits : compilation conditionnelle pour SwiftPM
Les Package Traits permettent de définir des fonctionnalités optionnelles dans vos packages Swift. Particulièrement utile pour Embedded Swift, WebAssembly, ou tout contexte où certaines dépendances ne sont pas disponibles.
Définir des traits dans Package.swift
Utiliser les traits dans le code
Activer un trait côté consommateur
Interopérabilité Objective-C : @implementation
Le nouvel attribut @implementation permet de fournir une implémentation Swift pour une déclaration importée depuis Objective-C. Idéal pour migrer progressivement du code legacy.
Cas d'usage : remplacer une @implementation Objective-C
Si vous avez un header Objective-C :
Vous pouvez maintenant fournir l'implémentation en Swift :
Cela permet de supprimer le fichier .m correspondant tout en gardant l'interface Objective-C intacte pour le reste du codebase.
Swift Testing : nouvelles capacités
Swift Testing gagne en flexibilité avec des améliorations sur les macros de test.
Swift Testing introduit également TestScoping pour personnaliser le contexte d'exécution des tests (setup/teardown). L'API a évolué entre Swift 6.1 et 6.2 — pour les détails d'implémentation, consultez ST-0007.
Récupérer l'erreur capturée
Les macros #expect(throws:) et #require(throws:) retournent maintenant l'erreur capturée :
Contrôle fin des diagnostics
SE-0443 introduit un contrôle granulaire sur les warnings et erreurs du compilateur.
Activer l'affichage des groupes de diagnostic
Dans les Build Settings Xcode, ajoutez -print-diagnostic-groups aux Swift Compiler Custom Flags. Les messages afficheront alors leur catégorie :
Contrôler les warnings via flags de compilation
Swift utilise -Wwarning pour garder un diagnostic comme warning, et -Werror suivi du nom du groupe (avec un espace, pas =) pour le traiter comme erreur :
Migration depuis Swift 6.0
La mise à jour vers Swift 6.1 est généralement transparente. Quelques points d'attention :
Visibilité des membres importés
Swift 6.1 introduit un mode optionnel de visibilité plus strict pour les imports. Si vous aviez des imports transitifs (accès à une API via un import dans un autre fichier), vous devrez peut-être ajouter des imports explicites.
Pour activer ce comportement :
Vérification recommandée
Pour aller plus loin
Swift 6.1 prépare le terrain pour Swift 6.2, qui apportera des changements plus significatifs sur la concurrence. En attendant, ces améliorations de qualité de vie méritent d'être adoptées dès maintenant.
Ressources officielles
Swift 6.1 Release Notes — Blog officiel Swift.org
SE-0439 Trailing Commas — Proposition d'évolution
SE-0449 nonisolated on Types — Proposition d'évolution
SE-0443 Diagnostic Control — Proposition d'évolution
What's new in Swift 6.1 — Paul Hudson, Hacking with Swift