0Pricing
Swift Academy · Pelajaran

try await dan propagasi galat

Gunakan try await dengan fungsi asinkron yang dapat melempar galat, tangani kegagalan dengan do/catch , dan teruskan galat ke atas dengan rapi, termasuk CancellationError .

try await dan propagasi galat 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.

Mengapa try await?

try await memanggil fungsi asinkron yang dapat melempar kesalahan. Jika fungsi tersebut melempar kesalahan, kesalahan akan diteruskan kecuali Anda menanganinya. Anda juga dapat menggunakan try? untuk mengubahnya menjadi Optional.

Asinkron yang melempar kesalahan + do/catch

Buat fungsi asinkron yang dapat melempar kesalahan, lalu panggil dengan try await di dalam do/catch untuk menangani kegagalan.

enum NetError: Error { case offline; case badStatus(Int) }

func fetchNumber(from ok: Bool) async throws -> Int {
    try await Task.sleep(nanoseconds: 100_000_000)
    if !ok { throw NetError.offline }
    return 7
}

Task {
    do {
        let n = try await fetchNumber(from: true)
        print("value:", n)          // 7
    } catch {
        print("failed:", error)     // handled here
    }
}

Mengubah kesalahan

Gunakan try? untuk memperoleh Optional alih-alih melempar kesalahan. Hindari try! kecuali Anda yakin bahwa operasi tersebut tidak mungkin gagal.

Task {
    // try? converts failure to nil
    let maybe = try? await fetchNumber(from: false)
    print("optional result:", String(describing: maybe)) // nil on error

    // ⚠️ try! will crash if an error is thrown — avoid in production
    // let forced = try! await fetchNumber(from: false)
}

Meneruskan kesalahan ke atas

Tandai pemanggil sebagai async throws untuk meneruskan kesalahan ke tingkat atas; kesalahan tersebut dapat ditangani pada batas yang lebih tinggi.

func loadProfile(ok: Bool) async throws -> String {
    let id = try await fetchNumber(from: ok)   // propagate on error
    return "id:\\(id)"
}

Task {
    do {
        let s = try await loadProfile(ok: true)
        print(s) // "id:7"
    } catch {
        print("propagated:", error)
    }
}

Penanganan khusus

Gunakan blok catch dengan pencocokan pola. Tangani CancellationError terlebih dahulu agar proses penghentian tetap cepat dan tenang.

enum FileError: Error { case notFound }

func mightCancel() async throws {
    for _ in 0..<5 {
        try Task.checkCancellation()                 // throws CancellationError
        try await Task.sleep(nanoseconds: 30_000_000)
    }
}

Task {
    let t = Task { try await mightCancel() }
    t.cancel()
    do {
        try await t.value
    } catch is CancellationError {
        print("cancelled cleanly")                   // handle cancellation separately
    } catch {
        print("other error:", error)
    }
}

Panduan

Tips:

  • Teruskan menggunakan try hingga mencapai batas yang dapat mengambil keputusan, seperti UI, CLI, atau Task tingkat teratas.
  • Utamakan kesalahan domain berupa enum agar lebih jelas.
  • Ubah dengan try? hanya ketika ketiadaan nilai dapat diterima.
  • Tangani CancellationError secara khusus.

Penanganan kesalahan dengan try await

Pemeriksaan singkat: Apa yang dilakukan try await f() terhadap kesalahan?

Ringkasan

Ringkasan: Gunakan try await bersama fungsi asinkron yang dapat melempar kesalahan, teruskan kesalahan dari fungsi pembantu ke atas, ubah dengan try? ketika nilai opsional sudah memadai, dan tangani CancellationError secara eksplisit.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “try await dan propagasi galat” gratis?

Ya — teks lengkap “try await dan propagasi galat” 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 “try await dan propagasi galat”?

Gunakan try await dengan fungsi asinkron yang dapat melempar galat, tangani kegagalan dengan do/catch , dan teruskan galat ke atas dengan rapi, termasuk CancellationError . 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 “try await dan propagasi galat” 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. Konkurensi terstruktur, fungsi asinkron
  2. async let, Task, pembatalan
  3. try await dan propagasi galat
← Kembali ke Swift Academy