Jenis Hal di Swift
Aturannya adalah:
Instance kelas adalah tipe referensi (yaitu referensi Anda ke instance kelas secara efektif adalah pointer )
Fungsi adalah tipe referensi
Yang lainnya adalah tipe nilai ; "yang lainnya" berarti contoh dari struct dan contoh enum, karena hanya itu yang ada di Swift. Array dan string adalah instance struct, misalnya. Anda bisa meneruskan referensi ke salah satu dari hal itu (sebagai argumen fungsi) dengan menggunakan inout
dan mengambil alamat, seperti yang ditunjukkan oleh newacct. Tapi tipe itu sendiri adalah tipe nilai.
Apa Arti Jenis Referensi Bagi Anda
Objek tipe referensi dalam praktiknya khusus karena:
Penugasan belaka atau meneruskan ke fungsi dapat menghasilkan banyak referensi ke objek yang sama
Objek itu sendiri bisa berubah meskipun referensinya adalah konstanta ( let
, baik eksplisit maupun tersirat).
Mutasi objek memengaruhi objek itu seperti yang terlihat oleh semua referensi padanya.
Itu bisa berbahaya, jadi waspadalah. Di sisi lain, meneruskan tipe referensi jelas efisien karena hanya sebuah pointer yang disalin dan diteruskan, yang sepele.
Apa Arti Jenis Nilai Bagi Anda
Jelas, meneruskan tipe nilai adalah "lebih aman", dan let
berarti seperti yang dikatakan: Anda tidak dapat mengubah instance struct atau instance enum melalui let
referensi. Di sisi lain, keamanan itu dicapai dengan membuat salinan nilai yang terpisah, bukan? Bukankah itu membuat pengoperan jenis nilai berpotensi mahal?
Ya dan tidak. Ini tidak seburuk yang Anda kira. Seperti yang dikatakan Nate Cook, meneruskan tipe nilai tidak selalu berarti menyalin, karena let
(eksplisit atau tersirat) menjamin keabadian sehingga tidak perlu menyalin apa pun. Dan bahkan melewati menjadi var
referensi tidak berarti bahwa hal-hal akan disalin, hanya bahwa mereka dapat jika diperlukan (karena ada mutasi). Para dokter secara khusus menyarankan Anda untuk tidak membengkokkan celana dalam.