0Pricing
Swift Academy · Pelajaran

Escaping vs non-escaping, autoclosure

Pahami closure non-escaping (bawaan) vs @escaping (disimpan atau digunakan setelah pengembalian), dan gunakan @autoclosure untuk pemanggilan yang lebih rapi dengan evaluasi malas.

Escaping vs non-escaping, autoclosure adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Gambaran Umum

Tujuan: Pahami kapan sebuah penutup bersifat tidak keluar secara bawaan dan kapan menggunakan @escaping karena disimpan atau berjalan secara asinkron, serta bagaimana @autoclosure membuat lokasi pemanggilan lebih rapi.

Bawaan Tidak Keluar

Parameter penutup secara bawaan bersifat tidak keluar—dipanggil sebelum fungsi selesai dan tidak pernah disimpan.

// Non-escaping by default: used immediately inside the function.
func applyTwice(_ f: (Int) -> Int, to x: Int) -> Int {
    return f(f(x))   // called synchronously; not stored
}
let doubled = applyTwice({ $0 * 2 }, to: 3)
print(doubled)  // 12

Penutup yang Keluar

Tandai parameter dengan @escaping jika Anda menyimpan penutup atau menjalankannya setelah fungsi selesai, misalnya pada pengatur waktu atau pekerjaan asinkron.

// Need @escaping when storing for later use:
var tasks: [() -> Void] = []

func addTask(_ work: @escaping () -> Void) {
    tasks.append(work)  // stored to run later
}

addTask { print("run later") }
tasks.forEach { $0() }

Penyelesaian Asinkron

API asinkron biasanya menerima penangan penyelesaian @escaping, yang dipanggil setelah fungsi selesai.

func fetchData(completion: @escaping (String) -> Void) {
    // simulate async: call completion in the future
    // (In real apps, use DispatchQueue or URLSession)
    completion("done")  // still escaping by contract (may be called later)
}
fetchData { result in print(result) }

Penutup Otomatis

@autoclosure memungkinkan pemanggil meneruskan sebuah ekspresi tanpa menulis penutup, sehingga keterbacaan meningkat.

// @autoclosure converts an expression into () -> Bool automatically.
func logIf(_ condition: @autoclosure () -> Bool) {
    if condition() { print("Condition is true") }
}

let x = 3
logIf(x > 1)       // no braces needed; expression is turned into a closure

Penutup Otomatis + Keluar

@autoclosure @escaping menyimpan ekspresi yang diteruskan untuk dievaluasi nanti—perhatikan keadaan yang ditangkap dan waktunya.

// You can combine @autoclosure with @escaping:
// (be careful: the expression is captured and evaluated later)
var checks: [() -> Bool] = []

func enqueueCheck(_ condition: @autoclosure @escaping () -> Bool) {
    checks.append(condition)   // stored to run later
}

var threshold = 10
enqueueCheck(threshold > 5)   // captures current variable by reference semantics
threshold = 3
print(checks.map { $0() })    // re-evaluates with updated threshold

Aturan Penutup Keluar

Pemeriksaan singkat: Kapan @escaping diperlukan?

Ringkasan

Ringkasan: Penutup secara bawaan tidak keluar. Gunakan @escaping jika penutup disimpan atau dipanggil nanti. Gunakan @autoclosure agar lokasi pemanggilan lebih rapi, dan gabungkan dengan @escaping secara hati-hati.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Escaping vs non-escaping, autoclosure” gratis?

Ya — teks lengkap “Escaping vs non-escaping, autoclosure” 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 “Escaping vs non-escaping, autoclosure”?

Pahami closure non-escaping (bawaan) vs @escaping (disimpan atau digunakan setelah pengembalian), dan gunakan @autoclosure untuk pemanggilan yang lebih rapi dengan evaluasi malas. 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 3 dari 3.

Berapa lama pelajaran “Escaping vs non-escaping, autoclosure” 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. Dasar closure & Capture
  2. Daftar capture — weak/unowned & capture nilai
  3. Escaping vs non-escaping, autoclosure
← Kembali ke Swift Academy