Swift Academy · Pelajaran

Enum Indirect dan Struktur Rekursif

Bina senarai terpaut dan pepohon menggunakan kes enum indirect.

Pelajaran 3 daripada 412 langkah

Enum Indirect dan Struktur Rekursif 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

Kes enumerasi `indirect` menyimpan nilai berkaitannya di sebalik penuding, lalu membolehkan struktur data rekursif seperti senarai terpaut, pepohon dan pepohon ungkapan.

Mengapa indirect Diperlukan

Tanpa `indirect`, enumerasi yang merujuk kepada dirinya sendiri akan mempunyai saiz tidak terhingga: ```swift enum List { case empty case node(T, List) // ❌ recursive without size bound } ``` `indirect` menambah peruntukan pada timbunan supaya saiznya hanya sebesar penuding.

Mendefinisikan Enumerasi indirect

```swift indirect enum List { case empty case node(T, List) } let list = List.node(1, .node(2, .node(3, .empty))) // [1, 2, 3] ```

Contoh Pepohon Binari

```swift indirect enum Tree { case leaf case branch(left: Tree, value: T, right: Tree) } let t = Tree.branch(left: .leaf, value: 5, right: .branch(left:.leaf, value:10, right:.leaf)) ```

Fungsi Rekursif pada Enumerasi indirect

```swift func sum(_ list: List) -> Int { switch list { case .empty: return 0 case .node(let value, let rest): return value + sum(rest) } } print(sum(list)) // 6 ```

Ketinggian Pepohon

```swift func height(_ tree: Tree) -> Int { switch tree { case .leaf: return 0 case .branch(let l, _, let r): return 1 + max(height(l), height(r)) } } ```

Pepohon Ungkapan

```swift indirect enum Expr { case num(Double) case add(Expr, Expr) case mul(Expr, Expr) } func eval(_ e: Expr) -> Double { switch e { case .num(let n): return n case .add(let a, let b): return eval(a) + eval(b) case .mul(let a, let b): return eval(a) * eval(b) } } print(eval(.mul(.num(2), .add(.num(3), .num(4))))) // 14 ```

indirect bagi Setiap Kes

Anda boleh menandakan hanya kes rekursif sebagai `indirect`, dan bukannya keseluruhan enumerasi: ```swift enum Tree { case leaf indirect case branch(left: Tree, value: T, right: Tree) } ``` Ini lebih tepat — hanya kes rekursif yang menanggung peruntukan pada timbunan.

Pertimbangan Prestasi

Kes `indirect` diperuntukkan pada timbunan. Untuk struktur rekursif yang kritikal dari segi prestasi, pertimbangkan untuk menggunakan kelas atau merujuk kepada perwakilan berasaskan tatasusunan.

Bila Perlu Menggunakan Enumerasi indirect

Kes penggunaan yang sesuai: • Senarai terpaut dan struktur data berfungsi • Pepohon Sintaks Abstrak (penghurai, kalkulator) • Hierarki sistem fail • Perwakilan pepohon JSON/XML Elakkan penggunaannya apabila perwakilan berasaskan tatasusunan yang rata lebih mesra cache.

Semakan Ringkas

Apakah yang ditambahkan oleh `indirect` pada kes enumerasi?

Rumusan

Perkara penting: • `indirect enum` atau `indirect case` membolehkan jenis rekursif • Diperlukan kerana jenis nilai rekursif akan mempunyai saiz tidak terhingga • Gunakannya untuk senarai terpaut, pepohon dan AST • Lakukan遍ahan menggunakan fungsi rekursif dan switch • `indirect` bagi setiap kes lebih tepat berbanding `indirect` untuk keseluruhan enumerasi Seterusnya: memodelkan mesin keadaan dengan enumerasi.
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 “Enum Indirect dan Struktur Rekursif” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Enum Indirect dan Struktur Rekursif”, 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 “Enum Indirect dan Struktur Rekursif”?

Bina senarai terpaut dan pepohon menggunakan kes enum indirect. 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 “Enum Indirect dan Struktur Rekursif” 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. Nilai Mentah dan CaseIterable
  2. Nilai Berkaitan untuk Data yang Kaya
  3. Enum Indirect dan Struktur Rekursif
  4. Memodelkan Mesin Keadaan dengan Enum
← Kembali ke Swift Academy