ViewModifier: wat is het, View-modifiers in SwiftUI

Auteur: IT Sectr Gepubliceerd: 2026-06-24 Leestijd: 6 min

ViewModifier — is een protocol in SwiftUI waarmee herbruikbare modifiers kunnen worden gemaakt voor het wijzigen van het uiterlijk en gedrag van View. Volgens Apple Developer Documentation, 2024 vereist ViewModifier de implementatie van de methode body(content:), die de oorspronkelijke View ontvangt en een gemodificeerde View retourneert, waarbij elke combinatie van ingebouwde modifiers in een enkel type wordt ingekapseld. Zonder dit protocol zouden ontwikkelaars dezelfde modifier-ketens op elke gebruikslocatie moeten herhalen.

Belangrijkste punten

  • ViewModifier — protocol voor het maken van aangepaste View-modifiers in SwiftUI
  • body(content:) — de enige verplichte methode die een gemodificeerde View retourneert
  • Ingebouwde modifiers (font, padding) — uitbreidingsmethoden van View die ViewModifier niet implementeren
  • Aangepaste modifiers maken het mogelijk om herhalende stijlcombinaties te inkapselen
  • ModifiedContent — het type dat wordt geretourneerd bij het toepassen van ViewModifier op View

Wat is ViewModifier in SwiftUI?

ViewModifier — is een SwiftUI-protocol dat een contract definieert voor het maken van modifiers die op elk View-type kunnen worden toegepast. Het is gedeclareerd als protocol ViewModifier { associatedtype Body: View; func body(content: Content) -> Body }, waarbij Content het type is van de oorspronkelijke View die aan de modifier is doorgegeven.

Het ViewModifier-protocol verscheen in iOS 13 samen met de eerste versie van SwiftUI en blijft stabiel tot en met iOS 18+. Het belangrijkste doel is om ontwikkelaars een mechanisme te bieden voor het inkapselen van herhalende modifier-ketens in één herbruikbaar type. Zonder ViewModifier zou elke keer dat dezelfde set stijlen moet worden toegepast, handmatig alle modifiers moeten worden herhaald.

Volgens Swift by Sundell (2023) is ViewModifier de voorkeursmanier om stijlen te organiseren in SwiftUI-projecten wanneer dezelfde set modifiers op drie of meer plaatsen wordt gebruikt. Voor eenmalige combinaties is een keten van ingebouwde modifiers rechtstreeks op View voldoende.

Syntax van het protocol

Het ViewModifier-protocol vereist de implementatie van één methode body(content:) en kan optioneel eigenschappen bieden voor het configureren van gedrag via initialisatieparameters van de aangepaste modifier.

Hoe het ViewModifier-protocol werkt

Het ViewModifier-protocol definieert de methode body(content:), die de oorspronkelijke View (type Content) ontvangt en een gemodificeerde View (type Body) retourneert. SwiftUI past de modifier toe op View, geeft deze door aan content en gebruikt het resultaat voor weergave.

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)
    }
}

// Gebruik:
Text("Hallo, SwiftUI!")
    .modifier(CardStyle())

Wanneer u .modifier(CardStyle()) aanroept, maakt SwiftUI een instantie van ModifiedContent<Text, CardStyle> die de oorspronkelijke View en de modifier opslaat. Bij het renderen roept SwiftUI CardStyle.body(content: text) aan, waardoor een gemodificeerde View met padding, background, cornerRadius en shadow wordt verkregen.

Belangrijk verschil: ViewModifier.body wordt aangeroepen bij elke update van de View, dus binnen body mogen geen zware berekeningen of bijwerkingen plaatsvinden. Als de modifier afhankelijk is van externe gegevens (status, omgeving), geef deze dan door via de initialisatieparameters.

Ingebouwde versus aangepaste modifiers: verschillen

De ingebouwde modifiers van SwiftUI (font, foregroundColor, frame, padding) — zijn uitbreidingsmethoden van het View-protocol die het type ModifiedContent retourneren. Ze implementeren ViewModifier niet rechtstreeks — SwiftUI gebruikt interne geoptimaliseerde implementaties voor elke ingebouwde modifier.

KenmerkIngebouwde modifiersAangepaste ViewModifier
ImplementatieUitbreidingsmethoden van ViewViewModifier-protocol
HergebruikEenmalige ketenMeervoudig gebruik
ParametersVast (kleur, grootte)Alles via initialisator
PrestatiesMaximaal (interne optimalisaties)Iets meer overhead
RetourtypeModifiedContentModifiedContent

Aangepaste ViewModifier zijn gerechtvaardigd wanneer dezelfde combinatie van modifiers op twee of meer plaatsen wordt gebruikt. Voor eenmalig gebruik verdient een directe modifier-keten de voorkeur — de code blijft leesbaar en de compiler optimaliseert beter.

Volgens WWDC 2023 raadt Apple aan om aangepaste ViewModifier te maken voor stijlen die verband houden met het ontwerpsysteem van de applicatie: kaarten, knoppen, invoervelden. Dit zorgt voor consistentie en vereenvoudigt het onderhoud bij ontwerpwijzigingen.

Patronen voor het gebruik van ViewModifier

Patroon 1: inkapseling van het ontwerpsysteem. Het meest voorkomende gebruiksscenario van ViewModifier — het creëren van een enkele bron van waarheid voor visuele stijlen in de applicatie. Elk element van het ontwerpsysteem (kaart, knop, koptekst) krijgt zijn eigen modifier.

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)
    }
}

Patroon 2: voorwaardelijke toepassing van de modifier. Soms moet de modifier alleen onder bepaalde voorwaarden worden toegepast. ViewModifier met een boolean parameter maakt het mogelijk om deze logica binnen body te inkapselen.

Patroon 3: compositie van modifiers. ViewModifier kan andere ViewModifiers toepassen binnen zijn eigen body. Dit maakt het mogelijk om een hiërarchie van modifiers te bouwen, waarbij elke modifier verantwoordelijk is voor zijn eigen aspect van visuele weergave. CardStyle kan bijvoorbeeld intern ShadowStyle en BorderStyle toepassen.

Volgens Point-Free (2024) heeft compositie van modifiers via ViewModifier de voorkeur boven overerving: elke modifier is verantwoordelijk voor één taak en ze kunnen onafhankelijk worden gecombineerd. Dit komt overeen met het single responsibility principe in SwiftUI.

Prestaties en compositie van modifiers

De prestaties van ViewModifier hangen af van het aantal ModifiedContent-verpakkingen dat bij elke toepassing wordt gemaakt. SwiftUI optimaliseert modifier-ketens via diffing in de renderfase, maar een overmatig aantal modifiers kan de update vertragen.

Aantal modifiersImpact op prestatiesAanbeveling
1–5MinimaalNormaal voor elke View
5–10MatigGroeperen in ViewModifier
10–20MerkbaarSamenvoegen in één aangepaste modifier
20+KritiekArchitectuur van View heroverwegen

Optimalisatie: combineer meerdere opeenvolgende modifiers van hetzelfde type (bijv. meerdere padding) in één. Gebruik PreferenceKey alleen wanneer dit echt nodig is — modifiers die voorkeuren lezen veroorzaken een extra renderdoorgang.

Praktische regel: als View meer dan 10 modifiers heeft — verplaats een deel ervan naar een aangepaste ViewModifier. Dit verbetert de leesbaarheid en stelt SwiftUI in staat om updates te optimaliseren. Volgens SwiftUI Lab (2024) vermindert het groeperen van modifiers in ViewModifier de rendertijd met 15–30% voor complexe Views.

Veelgestelde vragen

Wat is ViewModifier in SwiftUI?

ViewModifier — is een protocol voor het maken van herbruikbare modifiers die het uiterlijk of gedrag van View wijzigen. Het vereist de implementatie van de methode body(content:), die de oorspronkelijke View ontvangt en de gemodificeerde View retourneert.

Hoe verschilt ViewModifier van ingebouwde modifiers?

Ingebouwde modifiers (font, padding) zijn uitbreidingsmethoden van het View-protocol die interne geoptimaliseerde implementaties gebruiken. ViewModifier is een protocol voor aangepaste modifiers die een combinatie van ingebouwde modifiers inkapselen en initialisatieparameters kunnen hebben.

Wanneer moet ik een aangepaste ViewModifier maken?

Maak een aangepaste ViewModifier wanneer dezelfde combinatie van modifiers op drie of meer plaatsen wordt gebruikt. Gebruik voor eenmalige ketens directe modifiers op View — dit is eenvoudiger en efficiënter.

Kan ViewModifier status (State) bevatten?

Ja, ViewModifier kan @State of @Environment eigenschappen bevatten. SwiftUI beheert hun levenscyclus op dezelfde manier als voor View. Onthoud echter dat body bij elke update wordt aangeroepen, dus vermijd zware bewerkingen in de body van de modifier.

Hoe pas ik ViewModifier voorwaardelijk toe?

Gebruik if/else binnen @ViewBuilder of maak een modifier met een boolean parameter die binnen body wijzigingen toepast of overslaat. De PrimaryButton hierboven gebruikt bijvoorbeeld isEnabled voor voorwaardelijke toepassing van de stijl.

Samenvatting

  • ViewModifier — SwiftUI-protocol voor het maken van herbruikbare View-modifiers
  • body(content:) — methode die de oorspronkelijke View ontvangt en de gemodificeerde View retourneert
  • Ingebouwde modifiers — uitbreidingsmethoden van View die ViewModifier niet implementeren
  • ModifiedContent — type dat de oorspronkelijke View en de toegepaste modifier opslaat
  • Aangepaste modifiers zijn gerechtvaardigd bij herhaling van combinatie op 3+ plaatsen
  • Compositie van modifiers via ViewModifier heeft de voorkeur boven overerving
  • Groepering van modifiers in ViewModifier verhoogt de prestaties met 15–30%

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook