Belajar Swift - Tipe Data Lanjutan & Koleksi
Episode 4 of 23

Belajar Swift - Tipe Data Lanjutan & Koleksi

Episode ini membahas tipe data lanjutan Swift: Array, Dictionary, Set, dan tuple sebagai koleksi, optional dengan optional chaining dan nil coalescing, enum dengan associated values dan raw values, serta perbedaan mendasar struct dan class dalam value semantics dan reference semantics.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Setelah menguasai sintaks dasar, kalian butuh alat untuk memodelkan data nyata. Episode 4 membahas tipe data lanjutan dan koleksi Swift — Array, Dictionary, Set, tuple, optional, dan enum — yang menjadi tulang punggung setiap aplikasi, dari model data sampai state management.

Di episode ini juga kita membedah salah satu konsep paling penting dan paling sering disalahpahami: perbedaan struct dan class dalam value semantics versus reference semantics. Keputusan memilih salah satunya akan memengaruhi performa, thread safety, dan desain keseluruhan aplikasi kalian.

Koleksi Dasar

Array, Dictionary, dan Set

Tiga koleksi utama Swift melayani kebutuhan berbeda:

  • Array: koleksi berurutan, elemen bisa sama nilainya.
  • Dictionary: pasangan kunci-nilai, kunci unik.
  • Set: kumpulan nilai unik tanpa urutan.
Membuat dan memodifikasi koleksi
var kota = ["Jakarta", "Bandung", "Surabaya"]
kota.append("Yogyakarta")
print(kota.count)
 
var populasi = ["Jakarta": 10_562_088, "Bandung": 2_444_160]
populasi["Surabaya"] = 2_874_314
 
let favorit: Set = ["swift", "rust", "swift"]
print(favorit)

kota.append("Yogyakarta") menambah elemen di akhir Array. Set otomatis mendeduplikasi: favorit hanya menyimpan swift sekali. Pemilihan koleksi yang tepat menyederhanakan logika kalian — gunakan Set untuk pengujian keanggotaan dan mencegah duplikasi.

Tuple

Tuple menggabungkan beberapa nilai dalam satu nilai majemuk tanpa perlu tipe khusus:

Tuple dengan label
let koordinat = (x: 10, y: 20)
let (x, y) = koordinat
print("Lokasi: \(x), \(y)")

(x: 10, y: 20) membuat tuple dengan label yang bisa diakses langsung. Tuple berguna untuk nilai kembalian fungsi yang ringkas dan sementara — untuk data yang dipakai berulang, lebih baik definisikan struct.

Optional

Menangani Ketidakpastian Nilai

Optional adalah fitur inti yang membedakan Swift dari bahasa pendahulunya: sebuah nilai bisa ada atau tidak, dan compiler memaksa kalian menangani kedua kemungkinan. Deklarasi optional ditandai tanda tanya:

Optional dan nil coalescing
var namaPengguna: String? = nil
let teksTampil = namaPengguna ?? "Tamu"
 
print(teksTampil)

Operator ??nil coalescing — memberikan nilai default saat optional kosong. namaPengguna ?? "Tamu" menghindari akses nil tanpa menulis seluruh blok if-let.

Optional Chaining

Untuk mengakses properti atau method di dalam optional, gunakan optional chaining dengan tanda tanya:

Optional chaining
struct Profil {
    var nama: String
    var bio: String?
}
 
let profil = Profil(nama: "Arman", bio: "Cloud Engineer")
let bioPanjang = profil.bio?.count ?? 0
print(bioPanjang)

profil.bio?.count mengembalikan nil jika bio nil, dan jika tidak, nilai count. Rantai berhenti aman di titik pertama yang nil — pola ini mengurangi banyak percabangan defensif.

Enum

Raw Values dan Associated Values

Enum di Swift jauh lebih kuat dari enum di C: bisa membawa nilai mentah (raw values) sekaligus nilai terkait (associated values):

Enum dengan raw value
enum StatusKoneksi: String {
    case online = "terhubung"
    case offline = "putus"
}
 
let status = StatusKoneksi.online
print(status.rawValue)
Enum dengan associated value
enum Hasil {
    case sukses(data: String)
    case gagal(pesan: String)
}
 
let hasil = Hasil.gagal(pesan: "Timeout")
print(hasil)

case sukses(data: String) membawa data tambahan melekat pada case. Dipadukan dengan switch dan pattern matching, enum menjadi cara paling aman mewakili state dan hasil operasi — kita akan memakainya lagi di episode 6 untuk error handling.

Struct vs Class

Value Semantics dan Reference Semantics

Perbedaan paling fundamental antara struct dan class ada pada cara nilai disalin:

  • Struct: value semantics — setiap penugasan menyalin nilai baru yang independen.
  • Class: reference semantics — penugasan membagikan referensi ke instance yang sama.
Value vs reference
struct Titik {
    var x: Int
    var y: Int
}
 
var a = Titik(x: 1, y: 2)
var b = a
b.x = 99
print(a.x, b.x)
 
class Kereta {
    var posisi = 0
}
 
let k1 = Kereta()
let k2 = k1
k2.posisi = 10
print(k1.posisi, k2.posisi)

Pada struct, mengubah b.x tidak mengubah a karena b adalah salinan. Pada class, k1 dan k2 menunjuk objek yang sama sehingga keduanya membaca 10.

Kapan Memilih Apa

Pedoman Swift yang diterima luas: default ke struct. Struct memberi immutability alami, aman untuk concurrent, dan murah berkat copy-on-write. Gunakan class saat butuh identity (dua referensi harus menunjuk objek yang sama), pewarisan, atau interoperasi dengan API Objective-C yang mengandalkan referensi.

Info

Swift compiler mengoptimasi salinan struct dengan copy-on-write: salinan nyata baru terjadi saat nilai diubah. Jadi memakai struct tidak berarti menyalin data besar setiap saat.

Penutup

Inti yang harus dibawa pulang:

  • Array, Dictionary, dan Set melayani kebutuhan koleksi yang berbeda.
  • Tuple menggabungkan beberapa nilai tanpa tipe khusus.
  • Optional dipaksa ditangani compiler; ?? memberi nilai default saat nil.
  • Optional chaining ?. menjaga akses properti tetap aman.
  • Enum Swift mendukung raw values dan associated values.
  • Struct memakai value semantics dan menjadi pilihan default; class memakai reference semantics untuk identity dan pewarisan.

Di episode 5 selanjutnya kita akan membahas pemrograman berorientasi objek dan protocols — class, inheritance, dan method overriding, access control dari public sampai private, protocols beserta protocol extensions sebagai inti protocol-oriented programming, serta generics dengan type constraints. Mari lanjut!

Belajar Swift - Tipe Data Lanjutan & Koleksi | Belajar Swift