Class dan Struct

Dalam artikel ini terdapat 2 tujuan. Pertama, Kamu akan mempelajari dasar dari perbedaan antara class dan struct dengan memahami apa itu tipe reference dan tipe value. Kedua, Kamu akan menemukan mengapa struct tidak dapat diinherit.
Class
Untuk menunjukkan perbedaan antara class dan struct, pertama buatlah sebuah class HumanClass yang memiliki property name.
class HumanClass {
var name: String
init(name: String) {
self.name = name
}
}Buat Instance
var humanClassObject = HumanClass(name: "Panjul") humanClassObject.name // "Panjul"
Buat instance lain yang meng-copy humanClassObject
let newHumanClassObject = humanClassObject
Ubah value properti name dari newHumanClassObject menjadi “Faishal”
humanClassObject.name = "Faishal" newHumanClassObject.name // "Faishal"
properti name dari newHumanClassObject ikut berubah menjadi “Faishal”
Struct
Sekarang mari kita cari tahu apakah perilaku yang sama terjadi dengan objek yang dibuat dengan struct
struct HumanStruct {
var name: String
init(name: String) {
self.name = name
}
}Buat Instance
Buat instance structObject dan instance newStructObject yang meng-copy dari structObject
var structObject = HumanStruct(name: "Panjul") let newStructObject = structObject
Ubah value dari properti name dari structObject menjadi “Faishal”.
structObject.name = "Faishal" newStructObject.name // "Panjul"
Perubahan pada properti name dari structObject tidak berpengaruh pada newStructObject.name, begitupun sebaliknya.

Untuk class, ketika kamu membuat sebuah instance yang “meng-copy”, instance baru tersebut men-share objeknya dengan instance yang originalnya.
let newHumanClassObject = humanClassObject // share
Untuk struct, ketika kamu membuat sebuah instance yang “meng-copy”, instance yang baru membuat salinan identik dari objek, tetapi tidak men-share.
let newStructObject = structObject // copy-paste
Mutablity
Karena perbedaan mendasar, ada perbedaan yang menarik ketika membuat instance dengan let.
Mutability pada Class
class FadilClass {
var name = "fadil"
}
// Create Instance
let fadilClass = FadilClass()
fadilClass.name = "Fadielse"
fadilClass.name // "Fadielse"
let newFadilClass = fadilClass
newFadilClass.name = "Fadielse the Developer"
fadilClass.name // "Fadielse the Developer"Meskipun instance fadilClass telah dibuat dengan let, properti itu telah dimutasi. Itu dimungkinkan karena instance tidak memiliki objek. Sebagai gantinya, ia memiliki referensi ke objek FadilClass di cloud / RAM.
No Mutability pada Structs
struct FadilStruct {
var name = "Fadil"
}
let fadilStruct = FadilStruct()
fadilStruct.name
fadilStruct.name = "Fadielse"
// Error: Cannot assign to property: 'fadilStruct' is a 'let' constantDengan struct, ketika sebuah instance dibuat dengan konstanta let, itu tidak mungkin untuk mengubah propertinya karena instance memiliki salinannya sendiri dan melindungi dari campur tangan siapa pun dengan instance itu sendiri.
Kapan menggunakan Struct/Tipe Value?
struct10,000 – 1,000,000 lebih cepat dariclass– Stack Overflow- Tidak ada mutabilitas karena tidak ada hubungan antara objek
- Struktur Non-nested / tidak bercabang
Semoga bermanfaat.
