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