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

subscript

الفهرسة المخصّصة subscript

subscript يتيح تعريف صياغة myValue[index] الخاصة بك على أي نوع، بنفس أسلوب Array و Dictionary المدمجين.

يُعرَّف subscript بجسم يشبه الخاصية المحسوبة: get لإرجاع قيمة، وset اختياري لتمكين الكتابة أيضًا. يقبل أي عدد ونوع من المعاملات (بلا inout)، ويمكن تعريف أكثر من نسخة يختار Swift بينها حسب نوع المعامل الممرّر.

يمكن أيضًا تعريف subscript على النوع نفسه (وليس نسخة منه) بإضافة static.

الصياغة

subscript(index: Type) -> ReturnType {
    get { /* إرجاع قيمة */ }
    set(newValue) { /* تعيين قيمة */ }
}

📄 مثال

struct Grid {
    var values = Array(repeating: 0, count: 9)
    subscript(row: Int, col: Int) -> Int {
        get { values[row * 3 + col] }
        set { values[row * 3 + col] = newValue }
    }
}

var grid = Grid()
grid[0, 1] = 5

أهم النقاط

العنصرالوظيفة
getإلزامي — يحدّد القيمة المُرجَعة عند القراءة
set(newValue)اختياري — يفعّل الكتابة عبر []; بدونه القراءة فقط
static subscriptيُستدعى على النوع نفسه لا على نسخة منه

💡 نصائح عملية

  • إن كنت لا تحتاج set، احذفه واحذف get مع أقواسه ليصبح subscript للقراءة فقط
  • عرّف أكثر من subscript بمعاملات مختلفة (Int مقابل String مثلًا) ليختار Swift المناسب تلقائيًا

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

  • محاولة استخدام معامل inout داخل subscript — غير مسموح بالكامل
  • نسيان أن اسم معامل setter الافتراضي هو newValue إن لم تسمّه صراحةً

خصائص ذات صلة

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