Swift 6.1 : Toutes les nouveautés en détail

Publié le · Mis à jour le · 9 min

Wlad
Wlad
Fondateur & Tech Lead Swift

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é nonisolated aux types et extensions

  • Support des trailing commas partout

  • Inférence de type automatique pour TaskGroup

  • Package Traits pour la compilation conditionnelle

  • Nouvel attribut @implementation pour l'interop Objective-C

  • Amé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