متى تستخدم الأنواع الوجودية (any P) مقابل الأنواع العامة
اختر بين any P (الأنواع الوجودية) و generics : التخزين غير المتجانس والسلوك الديناميكي، مقابل التخصيص أثناء الترجمة والضمانات الساكنة.
متى تستخدم الأنواع الوجودية (any P) مقابل الأنواع العامة درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 3 دروس في المجموع.
الأنواع الوجودية مقابل الأنواع العامة
تخزّن الأنواع الوجودية (any P) قيماً من نوع ملموس غير معروف يطابق بروتوكولاً ما. أما الأنواع العامة (<T: P>) فتحافظ على النوع الملموس وقت الترجمة لإتاحة التخصيص.
إعداد البروتوكول
من السهل استخدام البروتوكولات من دون أنواع مرتبطة كأنواع وجودية من صيغة any P وكقيود للأنواع العامة.
protocol Animal {
func speak() -> String
}
struct Dog: Animal { func speak() -> String { "woof" } }
struct Cat: Animal { func speak() -> String { "meow" } }المصفوفات غير المتجانسة
استخدم [any Animal] لتخزين المطابقات المختلفة معاً، واستدعِ واجهة البروتوكول فقط.
let zoo: [any Animal] = [Dog(), Cat()] // heterogeneous array
for a in zoo { print(a.speak()) } // "woof", "meow"التخصيص عبر الأنواع العامة
تحافظ الأنواع العامة على النوع الملموس (T)، مما يتيح مزيداً من التحسينات وفحوصات أقوى وقت الترجمة.
// Generic version — compiler specializes for each concrete type
func shout<T: Animal>(_ a: T) {
// Can inline/specialize based on concrete T
print(a.speak().uppercased())
}
shout(Dog()) // WOOF
shout(Cat()) // MEOWقيود PAT
لا تعمل البروتوكولات التي تحتوي على أنواع مرتبطة جيداً كأنواع وجودية عادية إذا كنت تحتاج إلى النوع المرتبط. يُفضّل استخدام الأنواع العامة أو محو الأنواع (مثل AnySequence).
protocol Container {
associatedtype Item
func get(_ i: Int) -> Item
}
// Storing as `any Container` loses the concrete Item.
// You can't use Item directly without additional constraints or type erasure.متى تختار كل خيار
اختر:
- any P عندما تحتاج إلى تخزين غير متجانس أو إلى سلوك ديناميكي عبر واجهة البروتوكول فقط.
- الأنواع العامة عندما تريد أنواعاً ثابتة أو تحسيناً أفضل، أو عندما يجب الربط بين أنواع متعددة (مثل Item نفسه).
- بالنسبة إلى PATs التي يكون فيها Item مهماً، استخدم الأنواع العامة أو أضف محو الأنواع.
any P مقابل الأنواع العامة
تحقق سريع: متى يُفضَّل استخدام any P؟
مراجعة
مراجعة: استخدم any P للمطابقات المختلطة والسلوك الديناميكي، واستخدم الأنواع العامة للتخصيص وقت الترجمة وعندما تكون الأنواع المرتبطة أو العلاقات بينها مهمة.
تعلم Swift مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 122
- الدروس
- 409
الأسئلة الشائعة
هل درس «متى تستخدم الأنواع الوجودية (any P) مقابل الأنواع العامة» مجاني؟
نعم — نص درس «متى تستخدم الأنواع الوجودية (any P) مقابل الأنواع العامة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 3 دروس في المجموع.
ماذا ستتعلم في «متى تستخدم الأنواع الوجودية (any P) مقابل الأنواع العامة»؟
اختر بين any P (الأنواع الوجودية) و generics : التخزين غير المتجانس والسلوك الديناميكي، مقابل التخصيص أثناء الترجمة والضمانات الساكنة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «متى تستخدم الأنواع الوجودية (any P) مقابل الأنواع العامة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- associatedtype وProtocols العامة
- أنماط محو النوع (AnySequence/AnyIterator)
- متى تستخدم الأنواع الوجودية (any P) مقابل الأنواع العامة