0Pricing
Swift Academy · درس

try await وانتشار الأخطاء

استخدم try await مع الدوال غير المتزامنة التي ترمي أخطاء، وتعامل مع الإخفاقات باستخدام do/catch ، وانشر الأخطاء بسلاسة إلى المستويات الأعلى (بما في ذلك CancellationError ).

try await وانتشار الأخطاء درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 3 دروس في المجموع.

لماذا try await؟

يستدعي try await دالة async ترمي الأخطاء. إذا رمت خطأ، ينتقل الخطأ إلى المستدعي ما لم تعالجه. ويمكنك أيضًا استخدام try? لتحويل النتيجة إلى Optional.

دالة async ترمي الأخطاء مع do/catch

أنشئ دالة async ترمي الأخطاء واستدعها باستخدام try await داخل do/catch لمعالجة حالات الفشل.

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
    }
}

تحويل الأخطاء

استخدم try? للحصول على Optional بدلًا من رمي خطأ. وتجنّب try! إلا إذا كنت متأكدًا من استحالة الفشل.

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)
}

تمرير الأخطاء إلى الأعلى

علّم الدوال المستدعية بأنها async throws من أجل تمرير الأخطاء إلى الأعلى؛ إذ يمكن معالجتها عند حدّ أعلى.

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)
    }
}

كتل catch محدّدة

استخدم كتل catch المطابقة للأنماط. عالج CancellationError أولًا للحفاظ على سرعة مسارات الإيقاف وهدوئها.

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)
    }
}

إرشادات

نصائح:

  • مرّر الخطأ باستخدام try حتى تصل إلى حدّ يمكنه اتخاذ القرار، مثل واجهة المستخدم أو CLI أو Task في المستوى الأعلى.
  • فضّل أخطاء المجال، مثل التعدادات، لتحسين الوضوح.
  • حوّل باستخدام try? فقط عندما يكون غياب القيمة مقبولًا.
  • عالج CancellationError بصورة مميّزة.

معالجة الأخطاء باستخدام try await

تحقق سريع: ماذا تفعل try await f() بالأخطاء؟

خلاصة

الخلاصة: استخدم try await مع دوال async التي ترمي الأخطاء، ومرّر الأخطاء إلى الأعلى من الدوال المساعدة، وحوّلها باستخدام try? عندما تكون القيمة الاختيارية مناسبة، وعالج CancellationError صراحةً.

الأسئلة الشائعة

هل درس «try await وانتشار الأخطاء» مجاني؟

نعم — نص درس «try await وانتشار الأخطاء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 3 دروس في المجموع.

ماذا ستتعلم في «try await وانتشار الأخطاء»؟

استخدم try await مع الدوال غير المتزامنة التي ترمي أخطاء، وتعامل مع الإخفاقات باستخدام do/catch ، وانشر الأخطاء بسلاسة إلى المستويات الأعلى (بما في ذلك CancellationError ). تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.

كم من الوقت يستغرق درس «try await وانتشار الأخطاء»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التزامن المنظّم والدوال غير المتزامنة
  2. async let وTask والإلغاء
  3. try await وانتشار الأخطاء
← العودة إلى Swift Academy