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

struct

الهياكل كنوع قيمة struct

struct نوع قيمة (value type): يُنسخ عند التمرير أو الإسناد، وهو الخيار الافتراضي الموصى به في Swift لمعظم النماذج.

كل struct تحصل تلقائيًا على باني (initializer) يقبل كل خصائصها. لأنها value type، أي نسخ لمتغيّر من نوعها ينسخ القيمة كاملة لا المرجع — تعديل النسخة الجديدة لا يؤثر على الأصل.

لتعديل خاصية داخل دالة عضو في struct، يجب وسم الدالة بـ mutating صراحةً.

الصياغة

struct Name {
    var property: Type
    mutating func change() { property = newValue }
}

📄 مثال

struct Point {
    var x: Int
    var y: Int

    mutating func moveRight() {
        x += 1
    }
}

var p1 = Point(x: 0, y: 0)
var p2 = p1        // نسخ كامل
p2.moveRight()
print(p1.x, p2.x)   // 0 1 — p1 لم يتأثر

أهم النقاط

العنصرالوظيفة
init تلقائيباني يقبل كل الخصائص بترتيب تعريفها، دون كتابة كود
mutatingإلزامي على أي دالة عضو تعدّل خصائص struct
value typeيُنسخ عند التمرير أو الإسناد، لا يُشارَك بمرجع

💡 نصائح عملية

  • فضّل struct على class افتراضيًا في Swift و SwiftUI ما لم تحتج فعليًا لهوية مشتركة (reference)
  • استخدم mutating فقط عند تعديل الخصائص؛ الدوال التي لا تعدّل شيئًا لا تحتاجها

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

  • نسيان mutating عند تعديل خاصية داخل دالة عضو — خطأ ترجمة
  • توقّع أن تعديل نسخة يؤثّر على الأصل كما بالأصناف — struct دائمًا يُنسخ

خصائص ذات صلة

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