Enum a Swift-ben — mi ez, szintaxis és használat

Szerző: IT Sectr Megjelenés: 2026-06-17 Olvasási idő: 6 perc

Enum a Swift-ben egy típus, amely összefogja a kapcsolódó értékek egy csoportját egy név alatt. Ellentétben C-vel és Objective-C-vel, ahol az enum csak egész konstansok halmaza, a Swift first-class felsorolásokat kínál associated values, raw values, metódusok és protokoll támogatással. A Apple, 2026 szerint az enum az egyik kulcsfontosságú eszköz az állapotok type-safe modellezéséhez iOS-fejlesztésben.

Főbb pontok

  • Enum — típus kapcsolódó értékek csoportjához, type-safety biztosításával
  • Raw values — azonos típusú azonos értékek a felsorolás összes esetéhez
  • Associated values — különböző adattípusok, egyedileg hozzárendelve minden esethez
  • Esetek a case kulcsszóval deklarálhatók és metódusokat tartalmazhatnak
  • Switch enum-mal az összes variáns kimerítő feldolgozását követeli meg a fordítótól

Mi az enum a Swift-ben?

Enum (felsorolás) — egy felhasználó által definiált adattípus, amely véges, egymást kizáró variánsok halmazát egyesíti. A Swift-ben az enum nem csak numerikus konstans, hanem teljes értékű típus saját logikával.

A felsorolás minden variánsát esetnek (case) nevezzük. Ellentétben az Objective-C-vel, ahol az enum egy egész típusra redukálódik, a Swift lehetővé teszi, hogy minden eset saját adatokat tároljon és metódusokkal rendelkezzen.

Az Apple szerint az enum a Swift-ben támogatja a generikusokat, inicializálókat, számított tulajdonságokat és protokollok implementációját — ez alkalmassá teszi állapotok, hibák, opciók és véges automaták modellezésére.

Használja az enum-ot mindenhol, ahol véges halmazt kell reprezentálni egymást kizáró variánsokból: képernyőállapotok, hibatípusok, irányok, szűrési opciók.

Az enum deklarálásának szintaxisa

Enum deklarálása a enum kulcsszóval történik, amelyet a név és a kapcsos zárójelekben lévő törzs követ.

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

Az esetek egy sorban is deklarálhatók vesszővel elválasztva:

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

Egy eset eléréséhez pont szintaxis használatos az ismert típus után:

swift
let direction = CompassDirection.north
// A típus ismert — a rövidített szintaxis elérhető:
var currentPlanet = .earth

Miután hozzárendeltük egy ismert enum típusú változóhoz, a Swift automatikusan kikövetkezteti a típust, és a felsorolás neve elhagyható az esetek elérésekor.

Raw Values a felsorolásokban

Raw Values — egy típusú értékek, amelyek az enum minden esetéhez hozzá vannak rendelve. Ellentétben az associated values-szel, a raw values típusa azonos minden esetnél és deklaráláskor kerül beállításra.

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

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

Egész raw values esetén a Swift automatikusan növeli az értékeket, ha csak az első van explicit módon megadva:

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

A raw values lehetnek Int, String, Character vagy bármilyen típus, amely megfelel a RawRepresentable protokollnak. A Swift automatikusan létrehozza az init? inicializálót az enum raw value-ból történő létrehozásához — ez hasznos API adatok feldolgozásakor.

Associated Values az enum-ban

Associated Values lehetővé teszik különböző adattípusok hozzárendelését a felsorolás minden esetéhez egyedileg. Ellentétben a raw values-szel, az associated values típusban és mennyiségben is eltérhetnek.

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

Switch segítségével történő feldolgozáskor az associated values változókhoz vagy konstansokhoz kötéssel kerülnek kinyerésre:

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

switch error {
case .timeout(let seconds):
    print("Időtúllépés \(seconds)s után")
case .httpError(let code, let message):
    print("HTTP \(code): \(message)")
case .noConnection:
    print("Nincs kapcsolat")
case .unknown(let err):
    print("Ismeretlen: \(err.localizedDescription)")
}

Az Apple dokumentáció szerint az associated values az enum-ot kifejező eszközzé teszi összetett állapotok modellezéséhez anélkül, hogy külön wrapper típusokat kellene létrehozni. Használja őket Result-szerű forgatókönyvekhez és hibák kontextussal történő modellezéséhez.

Rekurzív enum (indirect)

Rekurzív enum — olyan felsorolás, amelynek esetei magára az enum típusra hivatkoznak. Az ilyen esetek az indirect kulcsszóval vannak megjelölve.

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

Az indirect kulcsszó az enum előtt az összes esetet rekurzívként jelöli meg. Alternatívaként csak egy adott eset jelölhető meg indirect-tel:

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

A Swift az indirect használja a rekurzív esetek referenciákként (reference semantics) történő tárolására értékek helyett — ez elkerüli az enum végtelen méretét a veremben. A rekurzív enum-okat széles körben használják fák, láncolt listák és AST építésénél.

Enum és protokollok

Enum implementálhat protokollokat ugyanúgy, mint a struktúrák és osztályok. Ez a protokoll-orientált programozás egyik kulcsképessége a Swift-ben.

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

Az enum implementálhat Cocoa protokollokat is — például CaseIterable az összes eset gyűjteményének automatikus létrehozásához vagy Codable a szerializációhoz. Ez az enum-ot univerzális építőelemvé teszi a Swift alkalmazásokban.

Gyakran ismételt kérdések

Miben különbözik az enum a struct-tól a Swift-ben?

Enum — véges, egymást kizáró variánsok halmazával rendelkező típus, míg a struct tetszőleges tulajdonságok halmazával rendelkező típus. Az enum nem rendelkezhet stored properties-vel, de támogatja a computed properties-t és metódusokat.

Lehet egy enum-nak egyszerre raw values és associated values is?

Nem, az enum nem rendelkezhet egyszerre raw values és associated values értékekkel. A raw values azonos típusú értékek minden esethez, az associated values egyedi adatok minden esethez. Ezek a mechanizmusok kölcsönösen kizárják egymást.

Hogyan kaphatom meg az enum összes esetének tömbjét?

Adja hozzá a CaseIterable protokollnak való megfelelést. A Swift automatikusan létrehozza az allCases tulajdonságot, amely az összes eset gyűjteményét adja vissza a deklarálás sorrendjében. Ez kényelmes az összes variánson való iterációhoz.

Kötelező a switch használata az enum feldolgozásához?

Switch — a legbiztonságosabb módszer, mert a fordító ellenőrzi a kimerítő feldolgozást. Használható if case egy eset ellenőrzéséhez vagy == associated values nélküli enum esetén.

Létrehozható enum generikusokkal?

Igen, az enum támogatja a generikusokat: enum Result<T, E> { case success(T); case failure(E) }. Ez lehetővé teszi type-safe általános konstrukciók létrehozását siker és hiba kezeléséhez.

Összefoglalás

  • Enum a Swift-ben — teljes értékű típus metódusok, generikusok és protokollok támogatásával
  • Raw values lehetővé teszik azonos típusú azonos értékek beállítását minden esethez
  • Associated values lehetőséget adnak különböző adatok hozzárendelésére minden esethez
  • Indirect esetek szükségesek rekurzív struktúrákhoz az enum-ban
  • Protokollok implementálhatók enum által — ez a POP alapja a Swift-ben
  • Switch enum-mal garantálja a kimerítő feldolgozást fordítási szinten
  • Használja az enum-ot véges állapotok és type-safe opciók modellezéséhez

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is