تخطَّ إلى المحتوى

Closure { }

الإغلاقات Closure { }

الإغلاق كتلة كود مستقلّة يمكن تمريرها كقيمة، وتلتقط المتغيّرات من محيطها — تُستخدم كثيرًا كمعاملات دوال.

الإغلاق (closure) مشابه للدالة لكن بلا اسم، ويمكن تمريره كمعامل أو تخزينه في متغيّر. Swift يوفّر صياغة مختصرة تلقائيًا: أسماء المعاملات المضمنة ($0, $1...)، واستنتاج نوع الإرجاع، وحذف return لجسم من سطر واحد.

عندما يكون الإغلاق آخر معامل بدالة، يمكن كتابته كـ trailing closure خارج الأقواس لقراءة أوضح.

الصياغة

{ (params) -> ReturnType in
    // كود
}

// إغلاق لاحق (trailing)
func(param) { closureBody }

📄 مثال

let numbers = [3, 1, 4, 1, 5]

let sorted = numbers.sorted { $0 < $1 }
print(sorted)

let doubled = numbers.map { $0 * 2 }

أهم النقاط

العنصرالوظيفة
$0, $1أسماء ضمنية للمعاملات في الصياغة المختصرة
inيفصل بين توقيع الإغلاق وجسمه
trailing closureكتابة الإغلاق خارج الأقواس عندما يكون آخر معامل
[weak self]قائمة التقاط لمنع دورات الاحتفاظ بالذاكرة

💡 نصائح عملية

  • استخدم $0 و $1 فقط بالإغلاقات القصيرة جدًا — أعطِ أسماء واضحة للمنطق المعقّد
  • احرص على [weak self] بالإغلاقات المخزّنة داخل أصناف لتفادي دورات احتفاظ

⚠️ أخطاء شائعة

  • نسيان [weak self] بإغلاق يُخزَّن كخاصية على class — يسبّب تسرّب ذاكرة
  • الخلط بين ترتيب $0 و $1 عند دوال بمعاملين مثل sorted(by:)

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار SWIFT الكامل بالعربي.