Enum in Swift — wat is het, syntaxis en gebruik

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

Enum in Swift is een type dat een groep gerelateerde waarden onder één naam verenigt. In tegenstelling tot C en Objective-C, waar enum slechts een verzameling gehele constanten is, biedt Swift first-class enumeraties met associated values, raw values, methoden en ondersteuning voor protocollen. Volgens Apple, 2026 is enum een van de belangrijkste tools voor type-veilige modellering van toestanden in iOS-ontwikkeling.

Belangrijkste punten

  • Enum — een type voor een groep gerelateerde waarden dat type-veiligheid biedt
  • Raw values — identieke waarden van hetzelfde type voor alle cases van de enumeratie
  • Associated values — verschillende gegevenstypen, afzonderlijk aan elke case gekoppeld
  • Cases worden gedeclareerd met het sleutelwoord case en kunnen methoden bevatten
  • Switch met enum vereist uitputtende afhandeling van alle varianten door de compiler

Wat is enum in Swift?

Enum (enumeratie) — een door de gebruiker gedefinieerd gegevenstype dat een eindige verzameling elkaar uitsluitende varianten verenigt. In Swift is enum niet alleen numerieke constanten, maar een volwaardig type met eigen logica.

Elke variant van de enumeratie wordt een case genoemd. In tegenstelling tot Objective-C, waar enum wordt gereduceerd tot een geheel getal type, staat Swift elke case toe om eigen gegevens op te slaan en methoden te hebben.

Volgens Apple ondersteunt enum in Swift generics, initializers, berekende eigenschappen en implementatie van protocollen — dit maakt het toepasbaar voor het modelleren van toestanden, fouten, opties en eindige automaten.

Gebruik enum overal waar een eindige verzameling elkaar uitsluitende varianten moet worden weergegeven: schermtoestanden, fouttypen, richtingen, filteropties.

Syntaxis van enum-declaratie

Enum wordt gedeclareerd met het sleutelwoord enum gevolgd door een naam en een lichaam in accolades.

swift
enum CompassDirection {
    case north
    case south
    case east
    case west
}

Cases kunnen op één regel worden gedeclareerd met een komma:

swift
enum Planet {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}

Om een case te benaderen wordt puntnotatie gebruikt na het bekende type:

swift
let direction = CompassDirection.north
// Type is bekend — verkorte syntaxis is beschikbaar:
var currentPlanet = .earth

Na toewijzing aan een variabele van een bekend enum-type leidt Swift automatisch het type af en kan de naam van de enumeratie worden weggelaten bij het benaderen van cases.

Raw Values in enumeraties

Raw Values — waarden van hetzelfde type die aan elke case van de enum worden toegewezen. In tegenstelling tot associated values zijn raw values qua type identiek voor alle cases en worden ze bij declaratie ingesteld.

swift
enum HTTPStatusCode: Int {
    case ok = 200
    case notFound = 404
    case internalServerError = 500
}

let code = HTTPStatusCode.notFound
print(code.rawValue) // 404

Voor gehele raw values verhoogt Swift automatisch de waarden als alleen de eerste expliciet is opgegeven:

swift
enum Status: Int {
    case pending = 1
    case active      // 2
    case completed   // 3
}

Raw values kunnen van het type Int, String, Character of elk type zijn dat voldoet aan het protocol RawRepresentable. Swift genereert automatisch de initializer init? om een enum uit een raw value te maken — handig bij het parsen van API-gegevens.

Associated Values in enum

Associated Values maken het mogelijk om verschillende gegevenstypen aan elke case van de enumeratie afzonderlijk te koppelen. In tegenstelling tot raw values kunnen associated values verschillen in type en hoeveelheid.

swift
enum NetworkError {
    case timeout(seconds: Int)
    case httpError(code: Int, message: String)
    case noConnection
    case unknown(error: Error)
}

Bij verwerking via switch worden associated values geëxtraheerd door binding aan variabelen of constanten:

swift
let error = NetworkError.httpError(code: 403, message: "Forbidden")

switch error {
case .timeout(let seconds):
    print("Time-out na \(seconds)s")
case .httpError(let code, let message):
    print("HTTP \(code): \(message)")
case .noConnection:
    print("Geen verbinding")
case .unknown(let err):
    print("Onbekend: \(err.localizedDescription)")
}

Volgens Apple-documentatie maken associated values van enum een expressief hulpmiddel voor het modelleren van complexe toestanden zonder aparte wrapper-typen te creëren. Gebruik ze voor Result-achtige scenario's en het modelleren van fouten met context.

Recursieve enum (indirect)

Recursieve enum — een enumeratie waarvan de cases verwijzen naar het enum-type zelf. Dergelijke cases worden gemarkeerd met het sleutelwoord indirect.

swift
indirect enum LinkedList<T> {
    case empty
    case node(value: T, next: LinkedList<T>)
}

Het sleutelwoord indirect voor enum markeert alle cases als recursief. Als alternatief kan alleen een specifieke case worden gemarkeerd met indirect:

swift
enum ArithmeticExpression {
    case number(Int)
    indirect case addition(ArithmeticExpression, ArithmeticExpression)
    indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}

Swift gebruikt indirect om recursieve cases als referenties (reference semantics) op te slaan in plaats van waarden — dit voorkomt een oneindige grootte van de enum op de stack. Recursieve enum worden veel gebruikt bij het bouwen van bomen, gelinkte lijsten en AST.

Enum en protocollen

Enum kan protocollen implementeren net zoals structuren en klassen. Dit is een belangrijke mogelijkheid van protocol-georiënteerd programmeren in Swift.

swift
protocol Describable {
    var description: String { get }
}

enum PaymentMethod: Describable {
    case creditCard(last4: String)
    case applePay
    case bankTransfer

    var description: String {
        switch self {
        case .creditCard(let last4):
            return "Card ending in \(last4)"
        case .applePay:
            return "Apple Pay"
        case .bankTransfer:
            return "Bank Transfer"
        }
    }
}

Enum kan ook Cocoa-protocollen implementeren — bijvoorbeeld CaseIterable voor het automatisch genereren van een verzameling van alle cases of Codable voor serialisatie. Dit maakt enum een universele bouwsteen in Swift-applicaties.

Veelgestelde vragen

Waarin verschilt enum van struct in Swift?

Enum — een type met een eindige verzameling elkaar uitsluitende varianten, terwijl struct een type is met een willekeurige verzameling eigenschappen. Enum kan geen stored properties hebben, maar ondersteunt wel computed properties en methoden.

Kan enum zowel raw values als associated values tegelijk hebben?

Nee, enum kan niet tegelijkertijd raw values en associated values hebben. Raw values zijn waarden van hetzelfde type voor alle cases, associated values zijn individuele gegevens voor elke case. Deze mechanismen sluiten elkaar uit.

Hoe krijg ik een array van alle cases van een enum?

Voeg conformiteit met het protocol CaseIterable toe. Swift genereert automatisch de eigenschap allCases die een verzameling van alle cases in declaratievolgorde retourneert. Dit is handig voor iteratie over alle varianten.

Is het verplicht om switch te gebruiken voor het verwerken van enum?

Switch — de veiligste methode omdat de compiler uitputtende afhandeling controleert. U kunt if case gebruiken voor het controleren van één case of == voor enum zonder associated values.

Kan ik een enum met generics maken?

Ja, enum ondersteunt generics: enum Result<T, E> { case success(T); case failure(E) }. Dit maakt het mogelijk om type-veilige generieke constructies te creëren voor het afhandelen van succes en fouten.

Samenvatting

  • Enum in Swift — een volwaardig type met ondersteuning voor methoden, generics en protocollen
  • Raw values maken het mogelijk om identieke waarden van hetzelfde type voor alle cases in te stellen
  • Associated values bieden de mogelijkheid om verschillende gegevens aan elke case te koppelen
  • Indirect cases zijn noodzakelijk voor recursieve structuren in enum
  • Protocollen kunnen worden geïmplementeerd door enum — dit is de basis van POP in Swift
  • Switch met enum garandeert uitputtende afhandeling op compilatieniveau
  • Gebruik enum voor het modelleren van eindige toestanden en type-veilige opties

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