Struct — adalah tipe-nilai (value type) dalam bahasa Swift, yang instansinya disalin saat diteruskan antar bagian kode. Berbeda dengan kelas, struktur tidak mendukung pewarisan, tetapi mengimplementasikan protokol, berisi properti dan metode, serta menyediakan manajemen memori yang dapat diprediksi tanpa ARC. Menurut Swift Programming Language Guide, 2026, struct adalah blok bangunan dasar Swift — bahkan tipe standar Int, String, Array dan Dictionary diimplementasikan sebagai struktur. Bahasa ini merekomendasikan struktur sebagai pilihan prioritas untuk pemodelan data.
Poin Utama
Struct (struktur) — adalah tipe data gabungan di Swift yang mengelompokkan properti dan metode terkait ke dalam satu entitas. Berbeda dengan kelas, struktur adalah value types: saat diteruskan ke fungsi atau ditugaskan ke variabel baru, salinan independen dari struktur dibuat, bukan referensi ke objek asli.
Swift menggunakan struktur untuk semua tipe primitif: Int, Double, String, Bool, Array, Dictionary dan Set. Ini berarti bahkan angka dasar Int berperilaku seperti struktur — saat penugasan, salinan dibuat. Pengembang dapat mendefinisikan struktur sendiri dengan kumpulan properti dan metode yang diinginkan.
Menurut Swift Evolution (SE-0143), keputusan untuk mengimplementasikan tipe standar sebagai struktur didorong oleh kinerja dan prediktabilitas. Value types tidak membuat siklus referensi, tidak memerlukan penghitungan referensi ARC dan menjamin bahwa perubahan salinan tidak akan memengaruhi aslinya — ini sangat penting untuk imutabilitas data dalam skenario multi-thread.
Value type semantics — perbedaan utama antara struct dan class. Saat Anda menugaskan struktur ke variabel baru atau meneruskannya ke fungsi, Swift membuat salinan independen dari semua data. Setiap perubahan pada salinan tidak memengaruhi aslinya, menghilangkan efek samping yang khas dari tipe referensi.
// Contoh semantik value type
struct Point {
var x: Double
var y: Double
}
var p1 = Point(x: 10, y: 20)
var p2 = p1 // p2 adalah salinan independen dari p1
p2.x = 99 // Hanya p2 yang berubah
print(p1.x) // 10 — p1 tidak berubah
print(p2.x) // 99
Swift menggunakan Copy-on-Write (COW) untuk mengoptimalkan penyalinan. Jika beberapa variabel merujuk ke struktur yang sama, tetapi tidak ada yang mengubah data, penyalinan sebenarnya tidak terjadi. Swift berbagi memori antar variabel hingga mutasi pertama — saat itulah salinan nyata dibuat. Ini mencegah operasi alokasi yang berlebihan dan mempercepat kerja dengan koleksi.
Secara default, metode struktur tidak dapat mengubah propertinya — Swift memerlukan indikasi eksplisit mutating untuk metode yang melakukan perubahan. Pembatasan ini melindungi dari mutasi yang tidak disengaja dan membuat kode dapat diprediksi: jika metode tidak ditandai mutating, Anda dijamin tidak akan mengubah struktur.
Saat Anda menambahkan kata kunci mutating sebelum metode, Swift mendapatkan kemampuan untuk menulis nilai baru ke dalam properti struktur. Sebenarnya, metode bahkan dapat sepenuhnya mengganti instance struktur dengan yang baru melalui self = . Mekanisme ini digunakan, misalnya, dalam tipe Option dan Result.
// Struct dengan metode mutating
struct Counter {
private var value: Int = 0
// Metode mutating — dapat mengubah properti
mutating func increment() {
value += 1
}
// Metode mutating dapat mengganti self sepenuhnya
mutating func reset() {
self = Counter()
}
// Metode non-mutating — hanya baca
func currentValue() -> Int {
return value
}
}
var counter = Counter()
counter.increment()
print(counter.currentValue()) // 1
counter.reset()
print(counter.currentValue()) // 0
Aturan untuk mutating: struktur harus dideklarasikan dengan var, bukan let — struktur konstanta tidak dapat memanggil metode mutating. Kompiler memeriksa ini pada tahap kompilasi: upaya memanggil metode mutating pada konstanta let akan menyebabkan kesalahan kompilasi.
Pilihan antara struct dan class — salah satu keputusan fundamental di Swift. Kedua tipe dapat berisi properti, metode, inisialisasi dan mengimplementasikan protokol, tetapi memiliki perbedaan prinsip dalam semantik memori, pewarisan dan manajemen siklus hidup.
| Karakteristik | struct | class |
|---|---|---|
| Tipe | Value type (disalin) | Reference type (referensi) |
| Pewarisan | Tidak mendukung | Mendukung |
| ARC / penghitungan referensi | Tidak diperlukan | Memerlukan ARC |
| De-inisialisasi | Tidak mendukung | Mendukung deinit |
| Mengubah properti dalam konstanta | Hanya melalui var | Dapat melalui let (referensi konstan) |
| Type casting | Tidak mendukung | Mendukung |
| Penyimpanan dalam koleksi | Disimpan langsung (nilai) | Disimpan sebagai referensi (pointer) |
Struktur lebih disukai ketika data tidak memerlukan pewarisan, tidak boleh memiliki identitas bersama (misalnya, koordinat, dimensi, konfigurasi) dan diteruskan antar modul. Kelas dipilih untuk komponen UI (UIView, UIViewController), singleton dan objek dengan identitas bersama.
Apple merekomendasikan penggunaan struct sebagai tipe default untuk pemodelan data di Swift. Struktur cocok untuk sebagian besar skenario berkat semantik penyalinan yang dapat diprediksi dan tidak adanya overhead untuk penghitungan referensi. Mari kita lihat kasus umum ketika struct adalah pilihan optimal.
Jika entitas berisi data tanpa kebutuhan pewarisan (Product, User, Order, Point), gunakan struct. Kompiler secara otomatis menghasilkan memberwise initializer — Anda tidak perlu menulis init secara manual. Equatable dan Hashable juga diimplementasikan secara otomatis untuk struktur yang semua propertinya memenuhi protokol ini.
Untuk konfigurasi, pengaturan dan flag yang tidak berubah setelah pembuatan, struct lebih disukai daripada class. Struktur konstanta (let) menjamin imutabilitas semua bidang bersarang — pada class ini hanya berlaku untuk referensi, bukan untuk konten objek.
Struktur aman di lingkungan multi-thread karena value semantics. Setiap thread menerima salinan data independen dan tidak memengaruhi thread lain. Race condition antar thread tidak mungkin terjadi untuk value types, menjadikan struct pilihan utama untuk model di SwiftUI (ObservableObject memerlukan class, tetapi @State menggunakan struct).
// Contoh penggunaan struct untuk model data
struct User: Codable, Identifiable {
let id: UUID
var name: String
var email: String
var isPremium: Bool
// Properti computed — non-mutating
var displayName: String {
isPremium ? "\(name) ⭐️" : name
}
}
// Inisialisasi memberwise otomatis
let user = User(
id: UUID(),
name: "Alice",
email: "alice@example.com",
isPremium: true
)
// Penyalinan aman untuk multi-threading
var userCopy = user
userCopy.isPremium = false
// user.isPremium tetap true
Gunakan class ketika Anda memerlukan pewarisan (komponen UIKit/AppKit), identitas bersama (delegate, observer) atau siklus hidup objek yang terkontrol (deinit). Untuk yang lainnya — struct.
Pertanyaan yang Sering Diajukan
Struct di Swift — adalah tipe-nilai (value type) yang disalin saat diteruskan antar bagian kode. Struktur dapat berisi properti, metode, inisialisasi dan mengimplementasikan protokol. Tipe dasar Swift (Int, String, Array) diimplementasikan sebagai struktur.
Struct — value type (disalin saat penugasan), tidak mendukung pewarisan dan tidak memerlukan ARC. Class — reference type (diteruskan melalui referensi), mendukung pewarisan, de-inisialisasi dan penghitungan referensi. Pengembang merekomendasikan struct sebagai tipe default.
Mutating — kata kunci yang menunjukkan bahwa metode struktur dapat mengubah propertinya. Tanpa mutating, kompiler melarang modifikasi bidang. Metode mutating hanya dapat dipanggil pada variabel yang dideklarasikan dengan var, bukan let.
Copy-on-Write (COW) — optimasi Swift untuk struktur, di mana penyalinan data sebenarnya ditunda hingga saat mutasi pertama. Selama semua variabel hanya membaca struktur, mereka berbagi satu area memori. Ini meningkatkan kinerja saat bekerja dengan koleksi besar.
Gunakan struct untuk model data tanpa pewarisan, konfigurasi, DTO dan skenario multi-thread. Gunakan class untuk komponen UI UIKit/AppKit, singleton, entitas dengan identitas bersama (delegate, observer) dan objek yang memerlukan de-inisialisasi.
Ringkasan
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