Swift Academy · Pelajaran

Kaedah Mutasi dan Semantik Salin ketika Tulis

Ketahui sebab mutating diperlukan dan cara pengoptimuman COW Swift berfungsi.

Pelajaran 4 daripada 412 langkah

Kaedah Mutasi dan Semantik Salin ketika Tulis ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 4 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

Kaedah struktur yang mengubah suai sifat tersimpan mesti ditandakan `mutating`. Swift juga menggunakan Salin ketika Menulis (COW) untuk menjadikan semantik nilai lebih cekap.

Kata Kunci mutating

```swift struct Counter { var count = 0 mutating func increment() { count += 1 } mutating func reset() { count = 0 } } var c = Counter() c.increment() // count = 1 ``` Tanpa `mutating`, pengompil menolak kaedah yang mengubah `self`.

Mengapa mutating Diperlukan

Struktur ialah jenis nilai. Apabila Anda menghantar struktur, Anda menghantar *salinan*. Pengompil memerlukan `mutating` untuk mengetahui bahawa sesuatu kaedah akan mengubah nilai asal: ```swift let c = Counter() c.increment() // ❌ cannot use mutating on let ```

Menetapkan Semula self dalam mutating

Kaedah `mutating` boleh menggantikan keseluruhan `self`: ```swift struct Toggle { var isOn: Bool mutating func flip() { self = Toggle(isOn: !isOn) } } ```

Semantik Nilai: Tingkah Laku Penyalinan

```swift var a = Counter() var b = a // b is an independent copy a.increment() print(a.count) // 1 print(b.count) // 0 — unaffected ``` Menetapkan struktur menyalin semua sifat tersimpannya.

Salin ketika Menulis (COW)

Koleksi terbina dalam Swift (tatasusunan, kamus, set dan rentetan) menggunakan COW: ```swift var a = [1,2,3] var b = a // no copy yet — shared storage b.append(4) // NOW a copy is made — a is unchanged print(a) // [1,2,3] print(b) // [1,2,3,4] ```

Mengapa COW Penting

Tanpa COW, setiap penetapan struktur akan menyalin secara mendalam semua kandungan. COW bermakna salinan adalah murah (hanya penambahan kiraan rujukan) sehingga pengubahan mencetuskan salinan sebenar. Ini menjadikan jenis nilai sepantas jenis rujukan dalam kebanyakan keadaan.

Melaksanakan COW Tersuai

```swift struct Buffer { private var storage: NSMutableData private mutating func ensureUnique() { if !isKnownUniquelyReferenced(&storage) { storage = storage.mutableCopy() as! NSMutableData } } mutating func append(_ byte: UInt8) { ensureUnique() // safe to mutate storage now } } ```

mutating dan Protokol

Kaedah protokol yang mengubah suai mesti ditandakan `mutating` dalam protokol: ```swift protocol Resettable { mutating func reset() } struct Counter: Resettable { var count = 0 mutating func reset() { count = 0 } } ``` Kelas yang melaksanakan protokol tidak memerlukan `mutating` (kelas ialah jenis rujukan).

Struktur dalam let Tidak Boleh Diubah Sepenuhnya

```swift let pt = Point(x: 1, y: 2) pt.x = 3 // ❌ even though x is var inside Point ``` Apabila struktur disimpan dalam `let`, tiada satu pun sifat tersimpannya boleh diubah suai.

Semakan Pantas

Bilakah COW Swift benar-benar melakukan penyalinan?

Rumusan

Inti pati: • `mutating` menandakan kaedah yang mengubah sifat struktur • Kaedah `mutating` tidak boleh dipanggil pada struktur `let` • Penetapan menyalin struktur; COW menjadikannya murah untuk koleksi • COW mencetuskan salinan sebenar hanya pada pengubahan pertama • Laksanakan COW tersuai dengan `isKnownUniquelyReferenced` Kursus selesai! Seterusnya: pewarisan kelas.
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 “Kaedah Mutasi dan Semantik Salin ketika Tulis” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Kaedah Mutasi dan Semantik Salin ketika Tulis”, 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 “Kaedah Mutasi dan Semantik Salin ketika Tulis”?

Ketahui sebab mutating diperlukan dan cara pengoptimuman COW Swift berfungsi. 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 4 daripada 4.

Berapa lamakah pelajaran “Kaedah Mutasi dan Semantik Salin ketika Tulis” 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. Pemula Ahli dan Pemula Tersuai
  2. Sifat Tersimpan dan Pemerhati Sifat
  3. Sifat Terhitung dalam Struct
  4. Kaedah Mutasi dan Semantik Salin ketika Tulis
← Kembali ke Swift Academy