Associated Values di Swift: apa itu, sintaks dan contoh

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

Associated Values — mekanisme Swift yang memungkinkan untuk menghubungkan data arbitrer ke setiap varian enum secara individual. Tidak seperti raw values, di mana semua case memiliki nilai dengan tipe yang sama, associated values dapat berbeda dalam tipe dan jumlah untuk setiap case. Menurut Apple Documentation, 2026, ini adalah kemampuan kunci untuk memodelkan domain secara akurat tanpa membuat tipe pembungkus tambahan.

Poin utama

  • Associated Values — data individual yang terhubung ke case enum
  • Tipe associated values dapat berbeda untuk setiap case
  • Ekstraksi terjadi melalui binding nilai di switch atau if case
  • Saling eksklusif — associated values tidak kompatibel dengan raw values
  • Praktik — memodelkan kesalahan, hasil kueri, dan status UI

Apa itu Associated Values?

Associated Values — adalah informasi tambahan yang dapat disimpan oleh case enum bersama dengan dirinya sendiri. Tidak seperti raw values yang tetap pada tingkat deklarasi, associated values ditentukan saat pembuatan instance enum.

Bayangkan memodelkan metode pembayaran: case creditCard dapat menyimpan 4 digit terakhir dan tanggal kedaluwarsa, dan case applePay — tidak ada. Dengan associated values ini diimplementasikan secara alami, tanpa subkelas atau bidang opsional.

Menurut dokumentasi Apple, associated values mengubah enum dari kumpulan konstanta sederhana menjadi tipe data aljabar (sum type), yang khas untuk bahasa fungsional. Ini secara signifikan meningkatkan ekspresivitas kode.

Sintaks associated values

Associated values dideklarasikan dalam tanda kurung setelah case, dengan menyebutkan nama dan tipe parameter, seperti pada fungsi.

swift
enum MediaFile {
    case image(width: Int, height: Int, format: String)
    case video(duration: Double, codec: String)
    case audio(bitrate: Int)
    case unknown
}

Saat pembuatan instance, associated values diteruskan sebagai argumen:

swift
let photo = MediaFile.image(width: 1920, height: 1080, format: "jpeg")
let clip = MediaFile.video(duration: 120.5, codec: "h264")

Swift tidak memberlakukan batasan pada jumlah atau tipe associated values. Anda dapat menggunakan generics, fungsi closure, dan enum lain di dalam associated values. Ini memungkinkan pembangunan struktur bertingkat yang kompleks.

Nama parameter associated values digunakan sebagai label argumen saat pembuatan instance — ini meningkatkan keterbacaan kode. Saat ekstraksi melalui switch, nama berfungsi sebagai dokumentasi, menjelaskan arti setiap nilai. Pendekatan semacam itu membuat kode mendokumentasikan dirinya sendiri dan mengurangi kemungkinan kesalahan dalam pencocokan data. Ini sangat berharga dalam pengembangan tim aplikasi iOS besar.

Switch dengan associated values

Switch — cara utama untuk mengekstrak associated values. Nilai diikat ke konstanta atau variabel melalui let atau var.

swift
func describe(_ file: MediaFile) -> String {
    switch file {
    case .image(let w, let h, let fmt):
        return "Image \(w)x\(h) .\(fmt)"
    case .video(let duration, let codec):
        return "Video \(duration)s, \(codec)"
    case .audio(let bitrate):
        return "Audio \(bitrate)kbps"
    case .unknown:
        return "Unknown format"
    }
}

Swift mendukung pencocokan parsial — nilai spesifik associated values dapat ditentukan:

swift
switch file {
case .image(let w, let h, "png"):
    print("Gambar PNG \(w)x\(h)")
case .image(1920, 1080, _):
    print("Gambar Full HD")
default:
    break
}

Penggunaan wildcard (_) memungkinkan untuk mengabaikan associated values yang tidak perlu, dan konstanta di case — untuk memeriksa kecocokan dengan nilai tertentu.

Associated Values vs Raw Values

Banyak pengembang pemula mengacaukan associated values dengan raw values. Ini adalah mekanisme yang berbeda dengan skenario penerapan yang berbeda.

KarakteristikRaw ValuesAssociated Values
Tipe dataSatu tipe untuk semua caseTipe berbeda untuk setiap case
Saat penentuanSaat deklarasi enumSaat pembuatan instance
KewajibanSemua case memiliki nilaiBeberapa case bisa tanpa nilai
KompatibilitasSaling eksklusif — tidak dapat digunakan bersamaan

Menurut Swift Evolution, associated values diperkenalkan di Swift 2.0 sebagai bagian dari desain ulang enum. Mereka memberikan pendekatan aljabar untuk tipe, di mana setiap case adalah konstruktor terpisah dengan tanda tangannya sendiri.

Contoh praktis associated values

Associated values secara aktif digunakan dalam proyek iOS nyata. Mari kita lihat tiga skenario tipikal.

Memodelkan respons API

swift
enum APIResponse<T: Codable> {
    case success(data: T, cached: Bool)
    case failure(error: Error, retryAvailable: Bool)
    case loading(progress: Double)
}

State Machine UI

swift
enum ViewState<T> {
    case idle
    case loading(message: String)
    case loaded(data: T)
    case error(message: String, retryAction: () -> Void)
}

Dengan associated values, enum menjadi alat yang kuat untuk automata terbatas: setiap case — status, associated values — parameter status tersebut. Kompiler menjamin bahwa semua transisi diproses.

Ekstraksi melalui if case dan guard case

Untuk memeriksa satu case tanpa switch gunakan if case atau guard case. Ini lebih ringkas ketika hanya satu varian yang perlu diproses.

swift
let error = NetworkError.timeout(seconds: 30)

if case .timeout(let seconds) = error {
    print("Permintaan waktu habis setelah \(seconds)s")
}

guard case .httpError(let code, _) = error else {
    return
}
print("Kesalahan HTTP dengan kode \(code)")

Pertanyaan yang sering diajukan

Bisakah enum memiliki associated values tanpa parameter?

Ya, sebuah case mungkin tidak memiliki associated values — misalnya, case unknown. Case seperti itu berperilaku seperti case enum biasa tanpa data tambahan. Ini nyaman untuk status penanda.

Bagaimana cara membandingkan dua enum dengan associated values?

Swift tidak menghasilkan Equatable secara otomatis untuk enum dengan associated values (hingga Swift 4.2+). Tambahkan implementasi eksplisit Equatable atau gunakan switch untuk membandingkan setiap case satu per satu.

Bisakah associated values digunakan dalam enum rekursif?

Ya, associated values dalam indirect enum — teknik standar untuk membangun pohon dan daftar tertaut. Sebuah case dapat berisi associated value dari tipe yang sama dengan tanda indirect.

Apa perbedaan associated values dengan properti opsional di struct?

Associated values aman tipe — setiap case dijamin hanya memiliki datanya sendiri. Dalam struct dengan opsional, setiap instance berisi semua bidang dan pemeriksaan runtime untuk nil diperlukan.

Apakah associated values mendukung Codable?

Swift tidak menghasilkan Codable secara otomatis untuk enum dengan associated values. Implementasi manual encode dan decode melalui switch pada case menggunakan custom coding keys diperlukan.

Ringkasan

  • Associated Values — mekanisme untuk menghubungkan data yang berbeda ke setiap case enum
  • Sintaks — deklarasi parameter dalam tanda kurung setelah case, seperti pada fungsi
  • Ekstraksi melalui switch dengan let-binding atau if case
  • Tidak kompatibel dengan raw values — gunakan salah satunya
  • Generics dalam associated values membuat enum menjadi wadah universal
  • State Machine — skenario tipikal untuk associated values di iOS

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