Swift Academy · درس

قوائم التقاط الإغلاقات و[weak self]

استخدموا قوائم الالتقاط لمنع الإغلاقات من الاحتفاظ القوي بالكائنات.

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

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

مرحبًا بكم

تلتقط الإغلاقات المتغيرات من النطاق المحيط بها. وتتحكم قوائم الالتقاط (`[weak self]` و`[unowned self]` و`[value]`) بدقة في كيفية إجراء عمليات الالتقاط هذه.

الالتقاط القوي الافتراضي

```swift var name = "Alice" let greet = { print("Hello, \(name)") } name = "Bob" greet() // "Hello, Bob" — closure sees current value ``` تلتقط الإغلاقات *مراجع* إلى المتغيرات افتراضيًا.

أساسيات قائمة الالتقاط

```swift var count = 10 let snapshot = { [count] in print(count) } // captures value count = 99 snapshot() // 10 — snapshot of count at capture time ``` يؤدي إدراج نوع قيمة في `[]` إلى نسخ القيمة لحظة إنشاء الإغلاق.

نمط [weak self]

```swift class API { func fetch(completion: @escaping () -> Void) { ... } } class VC { func load() { api.fetch { [weak self] in guard let self else { return } // self might be nil by now self.updateUI() } } } ```

guard let self مع إطالة العمر

في Swift 5.3 والإصدارات الأحدث: أعيدوا ربط `self` داخل guard دون استخدام اسم مستعار: ```swift { [weak self] in guard let self else { return } // 'self' is now strong within this block doA() doB() doC() } ```

متى يكون [unowned self] آمنًا

```swift button.addTarget(self, action: #selector(tap), for: .touchUpInside) // If the button's closure is guaranteed not to outlive self: let action: () -> Void = { [unowned self] in self.handleTap() } ```

التقاط قيم متعددة

```swift let base = 100 let multiplier = 2 let compute = { [base, multiplier] in base * multiplier } print(compute()) // 200 ``` التقطوا قيمًا متعددة في القائمة نفسها، وافصلوا بينها بفواصل.

قائمة التقاط مع روابط مسماة

```swift let myService = service // rename in capture list: let handler = { [service = myService] in service.process() } ``` يفيد ذلك في التقاط لقطة محددة تحت اسم جديد.

الإغلاقات الهاربة وغير الهاربة

• يمكن تخزين الإغلاق `@escaping` واستدعاؤه بعد عودة الدالة → خطر حدوث دورات • يُستدعى الإغلاق غير الهارب قبل عودة الدالة → لا يوجد خطر لحدوث دورة ```swift func apply(_ f: () -> Void) { f() } // non-escaping, no [weak] needed func later(_ f: @escaping () -> Void) { queue.async { f() } } // escaping ```

تصحيح مشكلات الالتقاط

إذا اشتبهتم في وجود دورة: 1. أضيفوا `deinit { print("deallocated") }` إلى الصنف 2. انتقلوا بعيدًا عن الشاشة أو اضبطوا النسخة على nil 3. إذا لم تُطبع رسالة deinit → توجد دورة بعد ذلك، أضيفوا `[weak self]` إلى الإغلاقات في ذلك الصنف.

تحقق سريع

ماذا تفعل `[weak self]` في قائمة الالتقاط؟

مراجعة

أهم النقاط: • تلتقط الإغلاقات المراجع افتراضيًا • تنسخ قائمة الالتقاط `[value]` أنواع القيم وقت الإنشاء • `[weak self]` — لا تحتفظ بالكائن، وتحوّله تلقائيًا إلى nil، واستخدموا `guard let self` • `[unowned self]` — لا تحتفظ بالكائن، وليست آمنة مع nil • تحتاج الإغلاقات `@escaping` إلى قوائم التقاط؛ أما الإغلاقات غير الهاربة فعادةً فلا تحتاج إليها اكتملت الدورة! التالي: البرمجة الوظيفية في Swift.
البدء مجانًا

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

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

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

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

هل درس «قوائم التقاط الإغلاقات و[weak self]» مجاني؟

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

ماذا ستتعلم في «قوائم التقاط الإغلاقات و[weak self]»؟

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

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

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

كم من الوقت يستغرق درس «قوائم التقاط الإغلاقات و[weak self]»؟

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

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

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

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

  1. كيف تحسب ARC المراجع
  2. دورات الاحتفاظ: الأسباب والكشف
  3. مراجع weak وunowned
  4. قوائم التقاط الإغلاقات و[weak self]
← العودة إلى Swift Academy