Swift Academy · درس

الربط بين Result وasync/await

حوّلوا واجهات Result المعتمدة على الاستدعاءات الراجعة إلى دوال async تُطلق الأخطاء.

الدرس 4 من 412 خطوة

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

مرحبًا

تُرجع واجهات API القديمة المعتمدة على دوال الاستدعاء اللاحق `Result`. وتستخدم الشفرة الحديثة async/await. ويُعد الربط بينهما مهمة شائعة — إذ يوفّر Swift أنماطًا واضحة لكلا الاتجاهين.

withCheckedThrowingContinuation

```swift func fetchAsync(url: URL) async throws -> Data { try await withCheckedThrowingContinuation { cont in fetchCallback(url) { result in cont.resume(with: result) } } } ``` تقبل `cont.resume(with: result)` قيمة `Result` مباشرةً.

withCheckedContinuation (دون رمي أخطاء)

```swift func fetchAsync(url: URL) async -> Result { await withCheckedContinuation { cont in fetchCallback(url) { result in cont.resume(returning: result) } } } ```

تحويل async إلى Result

```swift func asResult(of operation: () async throws -> T) async -> Result { do { return .success(try await operation()) } catch { return .failure(error) } } let r = await asResult { try await fetch(url) } ```

Result.get() في سياق غير متزامن

```swift func process() async { let result: Result = await fetchAsync(url) do { let data = try result.get() handle(data) } catch { handle(error) } } ```

Task { } للربط

```swift func load() { Task { let data = try await fetchAsync(url) await MainActor.run { self.render(data) } } } ```

AsyncStream من دوال الاستدعاء اللاحق

```swift func events() -> AsyncStream { AsyncStream { cont in let token = subscribe { event in cont.yield(event) } cont.onTermination = { _ in unsubscribe(token) } } } ```

قواعد سلامة Continuation

• استدعوا `resume` مرة واحدة بالضبط — إذ إن استدعاءه مرتين يؤدي إلى سلوك غير معرّف • لا تستدعوا `resume` بعد عودة الدالة • استخدموا `withCheckedContinuation` في وضع التصحيح، إذ يكتشف الأخطاء؛ واستخدموا `withUnsafeContinuation` في الإصدار النهائي عند الحاجة إلى تحسين الأداء

MainActor لتحديثات واجهة المستخدم

```swift await MainActor.run { label.text = data.description } // or: @MainActor func updateUI(_ d: Data) { label.text = ... } await updateUI(data) ```

اختبار Async+Result

```swift func testFetch() async throws { let result = await asResult { try await fetchAsync(url) } switch result { case .success(let d): XCTAssertFalse(d.isEmpty) case .failure(let e): XCTFail(e.localizedDescription) } } ```

تحقق سريع

ما نوع continuation الذي يكتشف إساءة الاستخدام، مثل الاستئناف المزدوج، في إصدارات التصحيح؟

خلاصة

أهم النقاط: • `withCheckedThrowingContinuation` يربط استدعاءات callback بـ async throws • `cont.resume(with: result)` يقبل قيمة Result مباشرةً • لفّ `async throws` داخل `Result` باستخدام دالة مساعدة • استدعِ `resume` مرة واحدة بالضبط • استخدم `MainActor.run { }` لتحديث واجهة المستخدم بأمان من سياق async اكتمل المقرر! التالي: أساسيات SwiftUI.
البدء مجانًا

تعلم Swift مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
122
الدروس
409

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

هل درس «الربط بين Result وasync/await» مجاني؟

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

ماذا ستتعلم في «الربط بين Result وasync/await»؟

حوّلوا واجهات Result المعتمدة على الاستدعاءات الراجعة إلى دوال async تُطلق الأخطاء. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «الربط بين Result وasync/await»؟

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

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

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

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

  1. أساسيات Result
  2. ‏map وflatMap على Result
  3. أنواع الأخطاء المخصّصة باستخدام LocalizedError
  4. الربط بين Result وasync/await
← العودة إلى Swift Academy