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 (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.
Enum dideklarasikan dengan kata kunci enum diikuti nama dan badan dalam kurung kurawal.
enum CompassDirection {
case north
case south
case east
case west
}
Case dapat dideklarasikan dalam satu baris dengan koma:
enum Planet {
case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}
Untuk mengakses case digunakan notasi titik setelah tipe yang diketahui:
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 — 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.
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:
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 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.
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:
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 — enumerasi yang case-nya merujuk ke tipe enum itu sendiri. Case seperti itu ditandai dengan kata kunci indirect.
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:
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 dapat mengimplementasikan protokol seperti struktur dan kelas. Ini adalah kemampuan kunci dari pemrograman berorientasi protokol di 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
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.
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.
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.
Switch — adalah metode teraman karena kompiler memeriksa pencakupan menyeluruh. Anda dapat menggunakan if case untuk memeriksa satu case atau == untuk enum tanpa associated values.
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
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.
Baca juga