0Pricing
Swift Academy · درس

أنماط محو النوع (AnySequence/AnyIterator)

استخدم AnySequence و AnyIterator لمحو أنواع التسلسل أو المكرّر الملموسة، بحيث تعيد واجهات API «تسلسلًا من T» من دون كشف تفاصيل التطبيق.

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

لماذا محو النوع؟

يخفي محو النوع الأنواع الفعلية خلف غلاف ثابت. وباستخدام AnySequence / AnyIterator يمكنك إرجاع «تسلسل من العناصر» دون كشف البنية الداخلية.

القيد

يحتوي Sequence على نوع مرتبط (Element)، لذلك لا يمكن استخدام البروتوكول وحده كنوع فعلي لقيمة. نحتاج إلى غلاف.

// Goal: return "some Sequence<Int>"
// This won't compile as a stored value type:
// let s: Sequence = [1,2,3]   // Protocol with associated types
// Instead, erase the type to AnySequence<Int>.

غلاف AnySequence

يغلّف AnySequence أي تسلسل فعلي (Array أو Set أو تسلسل مخصص)، ويعرض نوعًا موحدًا مثل AnySequence<Int>.

// Build an AnySequence<Int> from an Array
let a = [1, 2, 3]
let seq1: AnySequence<Int> = AnySequence(a)
// Consume like any sequence
for x in seq1 { print(x, terminator: " ") }
print("")

غلاف AnyIterator

يغلّف AnyIterator دالة إغلاق تنتج عناصر. لفّها داخل AnySequence لكشف تسلسل كامل.

// Create an AnyIterator<Int> by hand
var i = 0
let it = AnyIterator<Int> {
    // Return next number or nil to stop
    guard i < 3 else { return nil }
    defer { i += 1 }
    return i
}
let seq2 = AnySequence(it)
for x in seq2 { print(x, terminator: " ") }  // 0 1 2
print("")

نوع إرجاع موحد

يتيح محو النوع لدالة واحدة إرجاع تطبيقات مختلفة ضمن نوع إرجاع ثابت وموحد (AnySequence<Int>).

// Return a sequence of Int without exposing concrete type
func numbers(flag: Bool) -> AnySequence<Int> {
    if flag {
        // Array-based
        return AnySequence([10, 20, 30])
    } else {
        // Lazy generated with AnyIterator
        var n = 1
        let it = AnyIterator<Int> {
            guard n <= 3 else { return nil }
            defer { n += 1 }
            return n * 100
        }
        return AnySequence(it)
    }
}

for x in numbers(flag: true)  { print(x, terminator: " ") }  // 10 20 30
print("")
for x in numbers(flag: false) { print(x, terminator: " ") }  // 100 200 300
print("")

متى يُستخدم

استخدم محو الأنواع عندما:

  • تريد إخفاء تفاصيل تنفيذ التسلسلات/المكررات.
  • يجب أن تُرجع واجهات API النوع نفسه بغض النظر عن الفروع الداخلية.
  • تصبح الأنواع العامة مكشوفة أكثر من اللازم عند حدود واجهة API.

ملاحظات: يُفضّل استخدام الأنواع العامة لتحقيق الأداء والوضوح داخل الوحدات؛ واستخدم AnySequence/AnyIterator عند الحدود عند الحاجة.

الغرض من AnySequence

تحقق سريع: ما الفائدة التي يوفرها AnySequence<T>؟

مراجعة

مراجعة: غلّف التسلسلات/المكررات الملموسة باستخدام AnySequence / AnyIterator لمحو الأنواع، ولإرجاع «تسلسل من النوع T» من واجهات API المرنة.

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

هل درس «أنماط محو النوع (AnySequence/AnyIterator)» مجاني؟

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

ماذا ستتعلم في «أنماط محو النوع (AnySequence/AnyIterator)»؟

استخدم AnySequence و AnyIterator لمحو أنواع التسلسل أو المكرّر الملموسة، بحيث تعيد واجهات API «تسلسلًا من T» من دون كشف تفاصيل التطبيق. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «أنماط محو النوع (AnySequence/AnyIterator)»؟

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

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

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

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

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