0Pricing
Swift Academy · Pelajaran

Daftar Capture Closure dan [weak self]

Menggunakan daftar capture agar closure tidak menangkap objek secara kuat.

Daftar Capture Closure dan [weak self] adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.

Selamat Datang

Penutupan menangkap variabel dari cakupan di sekitarnya. Daftar penangkapan (`[weak self]`, `[unowned self]`, `[value]`) mengontrol secara tepat bagaimana penangkapan tersebut dilakukan.

Penangkapan Kuat Bawaan

```swift var name = "Alice" let greet = { print("Hello, \(name)") } name = "Bob" greet() // "Hello, Bob" — closure sees current value ``` Secara bawaan, penutupan menangkap *referensi* ke variabel.

Dasar-Dasar Daftar Penangkapan

```swift var count = 10 let snapshot = { [count] in print(count) } // captures value count = 99 snapshot() // 10 — snapshot of count at capture time ``` Mencantumkan jenis nilai di `[]` menyalin nilai tersebut saat penutupan dibuat.

Pola [weak self]

```swift class API { func fetch(completion: @escaping () -> Void) { ... } } class VC { func load() { api.fetch { [weak self] in guard let self else { return } // self might be nil by now self.updateUI() } } } ```

guard let self dengan Masa Hidup yang Diperpanjang

Swift 5.3+: ikat ulang `self` di dalam pemeriksaan guard tanpa membuat bayangan nama: ```swift { [weak self] in guard let self else { return } // 'self' is now strong within this block doA() doB() doC() } ```

[unowned self] Saat Aman

```swift button.addTarget(self, action: #selector(tap), for: .touchUpInside) // If the button's closure is guaranteed not to outlive self: let action: () -> Void = { [unowned self] in self.handleTap() } ```

Menangkap Beberapa Nilai

```swift let base = 100 let multiplier = 2 let compute = { [base, multiplier] in base * multiplier } print(compute()) // 200 ``` Tangkap beberapa nilai dalam daftar yang sama, pisahkan dengan koma.

Daftar Penangkapan dengan Pengikatan Bernama

```swift let myService = service // rename in capture list: let handler = { [service = myService] in service.process() } ``` Berguna untuk menangkap cuplikan tertentu dengan nama baru.

Escaping vs Tidak Escaping

• Penutupan `@escaping` dapat disimpan dan dipanggil setelah fungsi selesai → berisiko menimbulkan siklus • Penutupan yang tidak keluar dipanggil sebelum fungsi selesai → tidak berisiko menimbulkan siklus ```swift func apply(_ f: () -> Void) { f() } // non-escaping, no [weak] needed func later(_ f: @escaping () -> Void) { queue.async { f() } } // escaping ```

Men-debug Masalah Penangkapan

Jika Anda menduga ada siklus: 1. Tambahkan `deinit { print("deallocated") }` ke kelas 2. Navigasikan menjauh atau atur instans menjadi nihil 3. Jika deinit tidak mencetak apa pun → ada siklus Kemudian tambahkan `[weak self]` ke penutupan di kelas tersebut.

Pemeriksaan Singkat

Apa yang dilakukan `[weak self]` dalam daftar penangkapan?

Ringkasan

Pokok penting: • Penutupan secara bawaan menangkap referensi • Daftar penangkapan `[value]` menyalin jenis nilai saat dibuat • `[weak self]` — tidak mempertahankan, otomatis menjadi nihil, gunakan `guard let self` • `[unowned self]` — tidak mempertahankan, tidak aman terhadap nihil • Penutupan `@escaping` memerlukan daftar penangkapan; penutupan yang tidak keluar biasanya tidak memerlukannya Kursus selesai! Berikutnya: pemrograman fungsional dalam Swift.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Daftar Capture Closure dan [weak self]” gratis?

Ya — teks lengkap “Daftar Capture Closure dan [weak self]” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Daftar Capture Closure dan [weak self]”?

Menggunakan daftar capture agar closure tidak menangkap objek secara kuat. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Daftar Capture Closure dan [weak self]” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Cara ARC Menghitung Referensi
  2. Siklus Retain: Penyebab dan Deteksi
  3. Referensi weak dan unowned
  4. Daftar Capture Closure dan [weak self]
← Kembali ke Swift Academy