ViewModifier : qu’est-ce que c’est, les modificateurs de View dans SwiftUI

Auteur : IT Sectr Publié le : 2026-06-24 Temps de lecture : 6 min

ViewModifier est un protocole dans SwiftUI qui permet de créer des modificateurs réutilisables pour changer l’apparence et le comportement des Views. Selon Apple Developer Documentation, 2024, ViewModifier nécessite l’implémentation de la méthode body(content:), qui prend la View originale et retourne une View modifiée, encapsulant toute combinaison de modificateurs intégrés en un seul type. Sans ce protocole, les développeurs devraient répéter les mêmes chaînes de modificateurs à chaque point d’utilisation.

Points clés

  • ViewModifier — un protocole pour créer des modificateurs de View personnalisés dans SwiftUI
  • body(content:) — la seule méthode obligatoire qui retourne une View modifiée
  • Modificateurs intégrés (font, padding) — méthodes d’extension de View, n’implémentant pas ViewModifier
  • Modificateurs personnalisés permettent d’encapsuler des combinaisons de styles répétitives
  • ModifiedContent — le type retourné lors de l’application d’un ViewModifier à une View

Qu’est-ce que ViewModifier dans SwiftUI ?

ViewModifier est un protocole SwiftUI qui définit un contrat pour créer des modificateurs pouvant être appliqués à tout type de View. Il est déclaré comme protocol ViewModifier { associatedtype Body: View; func body(content: Content) -> Body }, où Content est le type de la View originale passée au modificateur.

Le protocole ViewModifier est apparu dans iOS 13 avec la première version de SwiftUI et reste stable jusqu’à iOS 18+ inclus. L’objectif principal est de fournir aux développeurs un mécanisme pour encapsuler les chaînes de modificateurs répétitives en un seul type réutilisable. Sans ViewModifier, chaque fois que vous deviez appliquer le même ensemble de styles, vous deviez répéter manuellement tous les modificateurs.

Selon Swift by Sundell (2023), ViewModifier est la façon préférée d’organiser les styles dans les projets SwiftUI lorsque le même ensemble de modificateurs est utilisé dans trois endroits ou plus. Pour les combinaisons uniques, une chaîne de modificateurs intégrés directement sur la View suffit.

Syntaxe du protocole

Le protocole ViewModifier nécessite l’implémentation d’une méthode body(content:) et peut facultativement fournir des propriétés pour personnaliser le comportement via les paramètres de l’initialisateur du modificateur personnalisé.

Comment fonctionne le protocole ViewModifier

Le protocole ViewModifier définit la méthode body(content:), qui reçoit la View originale (type Content) et retourne une View modifiée (type Body). SwiftUI applique le modificateur à la View en la passant comme content et utilise le résultat pour l’affichage.

swift
struct CardStyle: ViewModifier {
    func body(content: Content) -> some View {
        content
            .padding(16)
            .background(Color.white)
            .cornerRadius(12)
            .shadow(radius: 4, x: 0, y: 2)
    }
}

// Utilisation :
Text("Bonjour, SwiftUI !")
    .modifier(CardStyle())

Lorsque vous appelez .modifier(CardStyle()), SwiftUI crée une instance de ModifiedContent<Text, CardStyle> qui stocke la View originale et le modificateur. Pendant le rendu, SwiftUI appelle CardStyle.body(content: text), obtenant une View modifiée avec padding, background, cornerRadius et shadow.

Distinction importante : ViewModifier.body est appelé chaque fois que la View est mise à jour, donc à l’intérieur de body, il ne doit y avoir ni calculs lourds ni effets secondaires. Si le modificateur dépend de données externes (state, environment), transmettez-les via les paramètres de l’initialisateur.

Modificateurs intégrés vs personnalisés : différences

Les modificateurs intégrés de SwiftUI (font, foregroundColor, frame, padding) sont des méthodes d’extension du protocole View qui retournent le type ModifiedContent. Ils n’implémentent pas ViewModifier directement — SwiftUI utilise des implémentations internes optimisées pour chaque modificateur intégré.

CaractéristiqueModificateurs intégrésViewModifier personnalisé
ImplémentationMéthodes d’extension de ViewProtocole ViewModifier
RéutilisationChaîne uniqueUtilisation multiple
ParamètresFixes (couleur, taille)Quels qu’ils soient via l’initialisateur
PerformancesMaximum (optimisations internes)Légèrement plus de surcharge
Type de retourModifiedContentModifiedContent

ViewModifier personnalisé se justifie lorsque la même combinaison de modificateurs est utilisée dans deux endroits ou plus. Pour les utilisations uniques, une chaîne directe de modificateurs est préférable — le code reste lisible et le compilateur optimise mieux.

Selon WWDC 2023, Apple recommande de créer des ViewModifier personnalisés pour les styles liés au système de design de l’application : cartes, boutons, champs de saisie. Cela garantit la cohérence et simplifie la maintenance lors des changements de design.

Modèles d’utilisation de ViewModifier

Modèle 1 : encapsulation du système de design. Le cas d’utilisation le plus courant de ViewModifier est de créer une source unique de vérité pour les styles visuels dans une application. Chaque élément du système de design (carte, bouton, en-tête) obtient son propre modificateur.

swift
struct PrimaryButton: ViewModifier {
    var isEnabled: Bool

    func body(content: Content) -> some View {
        content
            .font(.headline.weight(.semibold))
            .foregroundColor(.white)
            .padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24))
            .background(isEnabled ? Color.blue : Color.gray)
            .cornerRadius(8)
            .opacity(isEnabled ? 1.0 : 0.6)
    }
}

Modèle 2 : application conditionnelle du modificateur. Parfois, vous devez appliquer un modificateur seulement sous une certaine condition. Un ViewModifier avec un paramètre booléen permet d’encapsuler cette logique à l’intérieur de body.

Modèle 3 : composition de modificateurs. Un ViewModifier peut appliquer d’autres ViewModifier à l’intérieur de son body. Cela permet de construire une hiérarchie de modificateurs, où chacun est responsable de son propre aspect de la présentation visuelle. Par exemple, CardStyle peut appliquer en interne ShadowStyle et BorderStyle.

Selon Point-Free (2024), la composition de modificateurs via ViewModifier est préférable à l’héritage : chaque modificateur est responsable d’une tâche et ils peuvent être combinés indépendamment. Cela suit le principe de responsabilité unique dans SwiftUI.

Performances et composition des modificateurs

Les performances de ViewModifier dépendent du nombre d’enveloppes ModifiedContent créées à chaque application. SwiftUI optimise les chaînes de modificateurs par diffing lors de l’étape de rendu, mais un nombre excessif de modificateurs peut ralentir les mises à jour.

Nombre de modificateursImpact sur les performancesRecommandation
1–5MinimeNormal pour toute View
5–10ModéréRegrouper dans ViewModifier
10–20NotableCombiner en un modificateur personnalisé
20+CritiqueRevoir l’architecture de la View

Optimisation : combinez plusieurs modificateurs séquentiels du même type (par exemple, plusieurs padding) en un seul. Utilisez PreferenceKey seulement lorsque c’est vraiment nécessaire — les modificateurs qui lisent les préférences déclenchent un passage de rendu supplémentaire.

Règle pratique : si une View a plus de 10 modificateurs — extrayez certains d’entre eux dans un ViewModifier personnalisé. Cela améliorera la lisibilité et permettra à SwiftUI d’optimiser les mises à jour. Selon SwiftUI Lab (2024), regrouper les modificateurs dans un ViewModifier réduit le temps de rendu de 15 à 30 % pour les Views complexes.

Foire aux questions

Qu’est-ce que ViewModifier dans SwiftUI ?

ViewModifier est un protocole pour créer des modificateurs réutilisables qui changent l’apparence ou le comportement d’une View. Il nécessite l’implémentation de la méthode body(content:), qui prend la View originale et retourne une View modifiée.

En quoi ViewModifier diffère-t-il des modificateurs intégrés ?

Les modificateurs intégrés (font, padding) sont des méthodes d’extension du protocole View qui utilisent des implémentations internes optimisées. ViewModifier est un protocole pour les modificateurs personnalisés qui encapsulent une combinaison des modificateurs intégrés et peuvent avoir des paramètres d’initialisateur.

Quand créer un ViewModifier personnalisé ?

Créez un ViewModifier personnalisé lorsque la même combinaison de modificateurs est utilisée dans trois endroits ou plus. Pour les chaînes uniques, utilisez des modificateurs directement sur la View — c’est plus simple et plus performant.

Un ViewModifier peut-il contenir un état (State) ?

Oui, un ViewModifier peut contenir des propriétés @State ou @Environment. SwiftUI gère leur cycle de vie de la même manière que pour View. Cependant, rappelez-vous que body est appelé à chaque mise à jour, évitez donc les opérations lourdes dans le corps du modificateur.

Comment appliquer un ViewModifier conditionnellement ?

Utilisez if/else à l’intérieur de @ViewBuilder ou créez un modificateur avec un paramètre booléen qui applique ou saute conditionnellement les changements à l’intérieur de body. Par exemple, PrimaryButton ci-dessus utilise isEnabled pour l’application conditionnelle du style.

Résumé

  • ViewModifier — un protocole SwiftUI pour créer des modificateurs de View réutilisables
  • body(content:) — la méthode qui prend la View originale et retourne une View modifiée
  • Modificateurs intégrés — méthodes d’extension de View, n’implémentant pas ViewModifier
  • ModifiedContent — le type qui stocke la View originale et le modificateur appliqué
  • Modificateurs personnalisés se justifient quand une combinaison se répète dans 3+ endroits
  • Composition de modificateurs via ViewModifier est préférable à l’héritage
  • Regrouper les modificateurs dans ViewModifier améliore les performances de 15 à 30 %

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi