Enum di Swift — apa itu, sintaks dan penggunaan

Penulis: IT Sectr Diterbitkan: 2026-06-17 Waktu membaca: 6 mnt

Enum di Swift adalah tipe yang menggabungkan sekelompok nilai terkait di bawah satu nama. Tidak seperti C dan Objective-C, di mana enum hanyalah sekumpulan konstanta bilangan bulat, Swift menawarkan enumerasi first-class dengan associated values, raw values, metode dan dukungan protokol. Menurut Apple, 2026, enum adalah salah satu alat kunci untuk pemodelan state type-safe dalam pengembangan iOS.

Poin-poin utama

  • Enum — tipe untuk kelompok nilai terkait yang memastikan type-safety
  • Raw values — nilai identik dari satu tipe untuk semua case enumerasi
  • Associated values — tipe data berbeda yang melekat pada setiap case secara individual
  • Case dideklarasikan dengan kata kunci case dan dapat berisi metode
  • Switch dengan enum memerlukan pencakupan menyeluruh semua varian oleh kompiler

Apa itu enum di Swift?

Enum (enumerasi) — adalah tipe data buatan pengguna yang menggabungkan sekumpulan varian yang saling eksklusif. Di Swift, enum bukan hanya konstanta numerik, tetapi tipe yang lengkap dengan logikanya sendiri.

Setiap varian enumerasi disebut case. Tidak seperti Objective-C, di mana enum direduksi menjadi tipe bilangan bulat, Swift memungkinkan setiap case untuk menyimpan data sendiri dan memiliki metode.

Menurut Apple, enum di Swift mendukung generics, inisialisasi, properti terhitung dan implementasi protokol — ini membuatnya dapat diterapkan untuk memodelkan status, kesalahan, opsi, dan mesin status terbatas.

Gunakan enum di mana pun Anda perlu mewakili himpunan terbatas varian yang saling eksklusif: status layar, jenis kesalahan, arah, opsi filter.

Sintaks deklarasi enum

Enum dideklarasikan dengan kata kunci enum diikuti nama dan badan dalam kurung kurawal.

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

Case dapat dideklarasikan dalam satu baris dengan koma:

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

Untuk mengakses case digunakan notasi titik setelah tipe yang diketahui:

swift
let direction = CompassDirection.north
// Tipe diketahui — sintaks singkat tersedia:
var currentPlanet = .earth

Setelah menetapkan ke variabel dengan tipe enum yang diketahui, Swift secara otomatis menyimpulkan tipe dan nama enumerasi dapat dihilangkan saat mengakses case.

Raw Values dalam enumerasi

Raw Values — adalah nilai dari satu tipe yang ditetapkan ke setiap case enum. Tidak seperti associated values, raw values identik dalam tipe untuk semua case dan ditentukan saat deklarasi.

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

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

Untuk raw values bilangan bulat, Swift secara otomatis menaikkan nilai jika hanya yang pertama ditentukan secara eksplisit:

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

Raw values dapat bertipe Int, String, Character atau tipe apa pun yang sesuai dengan protokol RawRepresentable. Swift secara otomatis menghasilkan inisialisasi init? untuk membuat enum dari raw value — ini berguna saat mengurai data dari API.

Associated Values di enum

Associated Values memungkinkan untuk melampirkan tipe data yang berbeda ke setiap case enumerasi secara individual. Tidak seperti raw values, associated values dapat berbeda dalam tipe dan jumlah.

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

Saat diproses melalui switch, associated values diekstraksi melalui pengikatan ke variabel atau konstanta:

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

switch error {
case .timeout(let seconds):
    print("Waktu habis setelah \(seconds)s")
case .httpError(let code, let message):
    print("HTTP \(code): \(message)")
case .noConnection:
    print("Tidak ada koneksi")
case .unknown(let err):
    print("Tidak dikenal: \(err.localizedDescription)")
}

Menurut dokumentasi Apple, associated values menjadikan enum alat ekspresif untuk memodelkan status kompleks tanpa membuat tipe pembungkus terpisah. Gunakan untuk skenario seperti Result dan pemodelan kesalahan dengan konteks.

Enum rekursif (indirect)

Enum rekursif — enumerasi yang case-nya merujuk ke tipe enum itu sendiri. Case seperti itu ditandai dengan kata kunci indirect.

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

Kata kunci indirect sebelum enum menandai semua case sebagai rekursif. Sebagai alternatif, hanya case tertentu yang dapat ditandai dengan indirect:

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

Swift menggunakan indirect untuk menyimpan case rekursif sebagai referensi (reference semantics) daripada nilai — ini menghindari ukuran enum yang tak terbatas di stack. Enum rekursif banyak digunakan dalam membangun pohon, linked list, dan AST.

Enum dan protokol

Enum dapat mengimplementasikan protokol seperti struktur dan kelas. Ini adalah kemampuan kunci dari pemrograman berorientasi protokol di 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 juga dapat mengimplementasikan protokol Cocoa — misalnya, CaseIterable untuk menghasilkan koleksi semua case secara otomatis atau Codable untuk serialisasi. Ini menjadikan enum blok bangunan universal dalam aplikasi Swift.

Pertanyaan yang sering diajukan

Apa perbedaan enum dengan struct di Swift?

Enum — adalah tipe dengan sekumpulan varian yang saling eksklusif, sedangkan struct adalah tipe dengan sekumpulan properti arbitrer. Enum tidak dapat memiliki stored properties, tetapi mendukung computed properties dan metode.

Bisakah enum memiliki raw values dan associated values secara bersamaan?

Tidak, enum tidak dapat memiliki raw values dan associated values secara bersamaan. Raw values adalah nilai dari satu tipe untuk semua case, associated values adalah data individual untuk setiap case. Mekanisme ini saling eksklusif.

Bagaimana cara mendapatkan array semua case enum?

Tambahkan kepatuhan terhadap protokol CaseIterable. Swift secara otomatis menghasilkan properti allCases yang mengembalikan koleksi semua case sesuai urutan deklarasi. Ini berguna untuk iterasi melalui semua varian.

Apakah wajib menggunakan switch untuk memproses enum?

Switch — adalah metode teraman karena kompiler memeriksa pencakupan menyeluruh. Anda dapat menggunakan if case untuk memeriksa satu case atau == untuk enum tanpa associated values.

Bisakah enum dibuat dengan generics?

Ya, enum mendukung generics: enum Result<T, E> { case success(T); case failure(E) }. Ini memungkinkan pembuatan konstruksi generik type-safe untuk menangani keberhasilan dan kesalahan.

Kesimpulan

  • Enum di Swift — tipe lengkap dengan dukungan metode, generics, dan protokol
  • Raw values memungkinkan pengaturan nilai identik dari satu tipe untuk semua case
  • Associated values memberikan kemampuan untuk melampirkan data berbeda ke setiap case
  • Indirect case diperlukan untuk struktur rekursif dalam enum
  • Protokol dapat diimplementasikan oleh enum — ini adalah dasar POP di Swift
  • Switch dengan enum menjamin pemrosesan menyeluruh di tingkat kompilasi
  • Gunakan enum untuk memodelkan status terbatas dan opsi type-safe

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga