Swift Academy · Pelajaran

Graf Nilai/Rujukan Campuran

Struct yang mengandungi kelas: semantik rujukan tersembunyi dan cara mengendalikannya.

Pelajaran 3 daripada 412 langkah

Graf Nilai/Rujukan Campuran ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Selamat Datang

Struktur boleh mengandungi kelas sebagai sifat tersimpan. Apabila berbuat demikian, struktur berkelakuan sebagai jenis nilai di luar tetapi berkongsi rujukan kelas secara dalaman — perangkap yang halus.

Struktur yang Mengandungi Kelas

```swift class Storage { var data: [Int] = [] } struct Container { var storage = Storage() var label: String = "" } var a = Container() var b = a // copies label, but SHARES storage! a.storage.data.append(1) print(b.storage.data) // [1] — shared! ```

Hanya Sifat Nilai Disalin

Apabila struktur disalin: • Sifat jenis nilai (`label: String`) disalin sepenuhnya • Sifat jenis rujukan (`storage: Storage`) — hanya penuding disalin Ini dipanggil *salinan cetek*.

Membuat Salinan Mendalam

```swift struct Container { var storage: Storage func deepCopy() -> Container { let newStorage = Storage() newStorage.data = storage.data // copy values return Container(storage: newStorage, label: label) } } ```

COW Menjadi Penyelamat

Koleksi terbina dalam Swift mengelakkan perkara ini dengan menggunakan COW: ```swift struct SafeContainer { private(set) var storage = Storage() mutating func append(_ n: Int) { if !isKnownUniquelyReferenced(&storage) { storage = storage.copy() // copy before mutating } storage.data.append(n) } } ```

Kelas yang Mengandungi Struktur

```swift class ViewModel { var point = CGPoint(x: 0, y: 0) // value type inside reference type } let vm1 = ViewModel() let vm2 = vm1 // same ViewModel! vm1.point.x = 5 print(vm2.point.x) // 5 — shared because ViewModel is a class ```

Identiti berbanding Kesamaan

```swift class Dog { var name: String = "" } let x = Dog() let y = x print(x === y) // true — same object print(x !== y) // false let z = Dog() print(x === z) // false — different objects ```

Struktur Rekursif melalui Kelas

Struktur tidak boleh merujuk kepada diri sendiri, tetapi boleh mengandungi kelas yang merujuk kepada struktur itu: ```swift struct Tree { var value: Int var children: [Tree] // OK — Array uses class internally } ```

Mengesan Perkongsian Tidak Dijangka

Gunakan `isKnownUniquelyReferenced` semasa masa jalan untuk mengesan perkongsian: ```swift var s = Storage() var r: AnyObject = s print(isKnownUniquelyReferenced(&s)) // true var s2 = s print(isKnownUniquelyReferenced(&s)) // false — shared ```

Panduan Reka Bentuk

Apabila struktur mesti menyimpan keadaan jenis rujukan yang boleh diubah: 1. Laksanakan COW untuk memulihkan semantik nilai 2. Atau gunakan kelas tidak berubah: `let` berbanding `var` untuk sifat kelas 3. Atau reka semula — mungkin struktur itu patut menjadi kelas Dokumentasikan dengan jelas apabila perkongsian disengajakan.

Semakan Pantas

Apabila anda menyalin struktur yang mengandungi sifat kelas, apakah yang berlaku kepada kelas itu?

Ringkasan

Perkara utama: • Salinan struktur adalah cetek — rujukan kelas dikongsi • `isKnownUniquelyReferenced` mengesan perkongsian semasa masa jalan • Laksanakan COW untuk memulihkan semantik nilai sebenar • `===` / `!==` menguji identiti objek bagi kelas • Struktur rekursif menggunakan tatasusunan (disokong kelas) sebagai anak Seterusnya: mereka bentuk API untuk semantik nilai.
Percuma untuk bermula

Pelajari Swift dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
122
Pelajaran
409

Soalan Lazim

Adakah pelajaran “Graf Nilai/Rujukan Campuran” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Graf Nilai/Rujukan Campuran”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Graf Nilai/Rujukan Campuran”?

Struct yang mengandungi kelas: semantik rujukan tersembunyi dan cara mengendalikannya. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Graf Nilai/Rujukan Campuran” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Stack berbanding Heap: Tempat Nilai Disimpan
  2. Mutasi, Perkongsian dan Aliasing Tidak Dijangka
  3. Graf Nilai/Rujukan Campuran
  4. Mereka Bentuk API untuk Semantik Nilai
← Kembali ke Swift Academy