0Pricing
Swift Academy · درس

‏associatedtype وProtocols العامة

عرّف Protocols باستخدام associatedtype ، وشاهد كيف تربطها الأنواع الممتثلة، واستخدم الدوال العامة مع قيود Protocol.

‏associatedtype وProtocols العامة درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 3 دروس في المجموع.

لماذا الأنواع المرتبطة؟

يمكن أن تكون البروتوكولات عامة باستخدام associatedtype. وتربط الأنواع المطابقة العنصر النائب بنوع فعلي.

بروتوكول مع associatedtype

يعمل associatedtype Item مثل معامل نوع. ويمكن للمتطلبات استخدامه في الأساليب وsubscripts والخصائص.

protocol Container {
    associatedtype Item
    mutating func append(_ item: Item)
    var count: Int { get }
    subscript(index: Int) -> Item { get }
}

مطابقة فعلية

يختار النوع المطابق Item فعليًا (هنا Int) من خلال تنفيذ المتطلبات باستخدام ذلك النوع.

struct IntStack: Container {
    // Binds Item == Int implicitly by usage
    private var items: [Int] = []
    mutating func append(_ item: Int) { items.append(item) }
    var count: Int { items.count }
    subscript(index: Int) -> Int { items[index] }
}
var st = IntStack()
st.append(10); st.append(20)
print(st.count, st[1])

نوع مطابق عام

يمكن لنوع عام أن يطابق البروتوكول من خلال ربط Item == Element، مع الحفاظ على عمومية البروتوكول وإمكانية إعادة استخدامه.

struct Stack<Element>: Container {
    private var items: [Element] = []
    mutating func append(_ item: Element) { items.append(item) }
    var count: Int { items.count }
    subscript(index: Int) -> Element { items[index] }
    // Here, associatedtype Item == Element
}
var s = Stack<String>()
s.append("hi"); s.append("bye")
print(s.count, s[1])

استخدام البروتوكول في الأنواع العامة

قيّد الدوال باستخدام C: Container. ويمكنك استخدام C.Item بصورة مجردة دون تحديده.

// Generic algorithm operating on any Container
func dumpFirstTwo<C: Container>(_ c: C) {
    // We can talk about C.Item but not assume concrete type
    if c.count >= 2 {
        print("0:", c[0])
        print("1:", c[1])
    } else {
        print("too few elements")
    }
}
dumpFirstTwo(s)    // works with Stack<String>
dumpFirstTwo(st)   // works with IntStack

ملاحظات ونصائح

ملاحظات:

  • لا يمكن استخدام البروتوكولات ذات الأنواع المرتبطة مباشرةً كأنواع؛ يُفضّل استخدام الأنواع العامة أو محو النوع.
  • سمِّ العناصر النائبة بوضوح، مثل Item وElement.
  • يمكن أن تكون المطابقة صريحة (typealias Item = ...) أو مستنتجة من التواقيع.

معنى associatedtype

تحقق سريع: ماذا يعني associatedtype؟

خلاصة

الخلاصة: استخدم associatedtype لجعل البروتوكولات عامة. ويختار النوع المطابق النوع الفعلي، بينما يمكن للدوال العامة العمل مع أي نوع مطابق عبر القيود.

الأسئلة الشائعة

هل درس «‏associatedtype وProtocols العامة» مجاني؟

نعم — نص درس «‏associatedtype وProtocols العامة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 3 دروس في المجموع.

ماذا ستتعلم في «‏associatedtype وProtocols العامة»؟

عرّف Protocols باستخدام associatedtype ، وشاهد كيف تربطها الأنواع الممتثلة، واستخدم الدوال العامة مع قيود Protocol. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.

كم من الوقت يستغرق درس «‏associatedtype وProtocols العامة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏associatedtype وProtocols العامة
  2. أنماط محو النوع (AnySequence/AnyIterator)
  3. متى تستخدم الأنواع الوجودية (any P) مقابل الأنواع العامة
← العودة إلى Swift Academy