Daftar capture — weak/unowned & capture nilai
Gunakan daftar capture untuk mengendalikan cara closure menangkap referensi dan nilai: [weak self], unowned, serta snapshot nilai guna menghindari siklus retain dan bug terselubung.
Daftar capture — weak/unowned & capture nilai adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 3. 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 3 pelajaran total.
Mengapa Daftar Tangkapan?
Tujuan: Kendalikan apa dan bagaimana sebuah penutup menangkap nilai. Gunakan self yang lemah atau referensi tanpa kepemilikan untuk menghindari siklus penyimpanan, dan tangkap snapshot nilai jika diperlukan.
Penangkapan Kuat = Risiko Siklus
Penutup yang keluar atau disimpan akan mempertahankan nilai yang ditangkap. Menangkap self secara kuat di sini dapat membuat siklus penyimpanan.
class Owner {
var name = "Owner"
var onDone: (() -> Void)?
func start() {
// Strong capture of self can cause a cycle if onDone is stored:
onDone = {
print("Done by", self.name) // self captured strongly
}
}
}
var o: Owner? = Owner()
o?.start()
// If nothing nils onDone or o, both can keep each other alive.Pola Penangkapan Lemah
Gunakan self yang lemah untuk memutus siklus. self bersifat opsional di dalam penutup; buka nilainya dengan guard let atau rantai opsional.
class Owner2 {
var name = "Owner2"
var onDone: (() -> Void)?
func start() {
onDone = { [weak self] in
guard let self = self else { return } // safely unwrap optional self
print("Done by", self.name)
}
}
}
let o2 = Owner2()
o2.start()
o2.onDone?()Tanpa Kepemilikan (Gunakan dengan Hati-Hati)
Referensi tanpa kepemilikan mengasumsikan self tetap hidup lebih lama daripada penutup dan tidak bersifat opsional. Gunakan hanya jika Anda yakin nilainya tidak mungkin nil saat dipanggil.
class Owner3 {
var onDone: (() -> Void)?
func work() {
onDone = { [unowned self] in
// self must be alive when this runs; otherwise crash
print("Owner3 still alive")
}
}
}
let o3 = Owner3()
o3.work()
o3.onDone?()Gagasan Snapshot Nilai
Daftar tangkapan dapat membuat snapshot nilai, misalnya [n = count]. Tanpa daftar, konstanta let di dalam penutup tetap ditangkap saat penutup dibuat.
var count = 0
let makeLogger: () -> () -> Void = {
let snapshot = count // captured by value at creation
return {
print("snapshot =", snapshot, "current =", count)
}
}
count = 10
let logger = makeLogger()
count = 20
logger() // snapshot = 10, current = 20Pengikatan Nilai dalam Daftar Tangkapan
Gunakan daftar tangkapan untuk membuat snapshot nilai bernama, misalnya [initial = total], saat penutup dibuat.
var total = 5
let closure = { [initial = total] in
print("initial:", initial, " now:", total)
}
total = 9
closure() // initial uses captured value 5Alasan Menggunakan self yang Lemah
Pemeriksaan singkat: Mengapa menambahkan [weak self] ke penutup yang disimpan atau keluar?
Ringkasan
Ringkasan: Gunakan self yang lemah untuk memutus siklus; self menjadi opsional. Gunakan referensi tanpa kepemilikan hanya jika lifetime terjamin, dan tangkap snapshot nilai dengan pengikatan dalam daftar tangkapan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Daftar capture — weak/unowned & capture nilai” gratis?
Ya — teks lengkap “Daftar capture — weak/unowned & capture nilai” 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 3 pelajaran total.
Apa yang akan aku pelajari di “Daftar capture — weak/unowned & capture nilai”?
Gunakan daftar capture untuk mengendalikan cara closure menangkap referensi dan nilai: [weak self], unowned, serta snapshot nilai guna menghindari siklus retain dan bug terselubung. 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 2 dari 3.
Berapa lama pelajaran “Daftar capture — weak/unowned & capture nilai” 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
- Dasar closure & Capture
- Daftar capture — weak/unowned & capture nilai
- Escaping vs non-escaping, autoclosure