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 الكامل بالعربي.