فهم هوية العرض
تحكم في كيفية مقارنة SwiftUI للعروض وإعادة استخدامها.
فهم هوية العرض درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
الهوية هي أساس عمل SwiftUI
تتتبع SwiftUI كل عرض وفق هويته لتقرر ما إذا كان ينبغي تحديث عرض موجود أو إنشاء عرض جديد.
إن ضبط الهوية على نحو صحيح هو العامل الأهم لتحقيق الصحة والأداء.
نوعا الهوية
تستخدم SwiftUI شكلين: الهوية البنيوية (موضع العرض في شجرة العروض) والهوية الصريحة (معرّف تعيّنونه).
الهوية البنيوية
تأتي هوية العرض افتراضيًا من موضعه في التسلسل الهرمي. ينشئ فرعا if أدناه عرضين مختلفين بنيويًا.
var body: some View {
if isOn {
Text("On") // one identity
} else {
Text("Off") // a different identity
}
}لماذا تفقد الفروع الحالة؟
لأن لكل فرع هوية بنيوية مختلفة، يؤدي التبديل بينهما إلى إتلاف العرض الأول وإنشاء الثاني. وتُعاد تهيئة أي @State داخله.
if isExpanded {
DetailView() // new instance each time the branch flips
} else {
SummaryView()
}الهوية الصريحة باستخدام id()
يعيّن المُعدِّل .id(_:) هوية صريحة. ويخبر تغيير المعرّف SwiftUI بأن «هذا عرض مختلف»، مما يفرض إنشاء مثيل جديد وإعادة ضبط الحالة.
CounterView()
.id(selectedTab) // new identity per tabالهوية في ForEach
تحتاج ForEach إلى هوية مستقرة لكل عنصر. استخدموا مسار مفتاح يشير إلى معرّف مستقر، ولا تستخدموا فهرس المصفوفة مطلقًا مع المجموعات القابلة للتغيير.
ForEach(items, id: \.id) { item in
RowView(item: item)
}مأزق هوية الفهرس
يؤدي استخدام id: \.self مع الفهارس أو القيم التي تتغير إلى إعادة ترتيب الهويات عند تغيّر البيانات، مما يسبب رسومًا متحركة غير صحيحة وفقدانًا للحالة.
// Risky if items reorder or values repeat:
// ForEach(0..<items.count, id: \.self) { ... }الهوية والرسوم المتحركة
تُجري الرسوم المتحركة استيفاءً بين حالات الهوية نفسها. وإذا تغيّرت الهوية، تنفّذ SwiftUI انتقال إدراج وإزالة بدلًا من رسوم متحركة سلسة.
withAnimation {
// same identity -> property animates
// changed id -> transition (fade/slide)
}المعدِّلات الشرطية تغيّر الهوية
قد يؤدي تطبيق مُعدِّل داخل if إلى تغيير الهوية البنيوية، مما يعيد ضبط الحالة. فضّلوا عرضًا واحدًا تُحسب قيمة مُعدِّله بصورة شرطية.
// Better: keep one identity
Text("Hi")
.opacity(isHidden ? 0 : 1)
// Worse: branching creates two identitiesAnyView يخفي معلومات الهوية
يخفي تغليف العروض داخل AnyView نوعها عن SwiftUI، مما يضعف قدرتها على إجراء المقارنة بكفاءة. استخدموا الأنواع الملموسة أو @ViewBuilder بدلًا من ذلك كلما أمكن.
// Prefer @ViewBuilder over returning AnyView
@ViewBuilder
func content() -> some View {
if flag { A() } else { B() }
}الهوية المستقرة = حالة مستقرة
القاعدة العامة هي: حافظوا على استقرار الهوية عندما تريدون الحفاظ على الحالة والرسوم المتحركة السلسة، وغيّروها عمدًا عندما تريدون بالفعل بدء حالة جديدة.
اختبار سريع: هوية العرض
اختبروا مدى فهمكم لهوية العرض.
خلاصة: فهم هوية العرض
تعرّف SwiftUI العروض بنيويًا (موضعها في الشجرة) وصراحةً (.id). تحافظ الهوية المستقرة على @State وتتيح تحريك الخصائص بسلاسة؛ أما تغيير الهوية فيعيد ضبط الحالة ويؤدي إلى انتقالات.
امنحوا ForEach معرّفات مستقرة، وتجنبوا استخدام الفهرس كهوية للبيانات القابلة للتغيير، وقلّلوا من الفروع التي تبدّل الهوية، وتجنبوا AnyView عندما يكون النوع الملموس مناسبًا.
الأسئلة الشائعة
هل درس «فهم هوية العرض» مجاني؟
نعم — نص درس «فهم هوية العرض» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «فهم هوية العرض»؟
تحكم في كيفية مقارنة SwiftUI للعروض وإعادة استخدامها. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «فهم هوية العرض»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- فهم هوية العرض
- تقليل إعادة تقييم Body
- العروض القابلة للمقارنة ونطاق @State
- تحليل الأداء باستخدام أداة SwiftUI