0Pricing
Swift Academy · Leçon

Schémas d’effacement de type (AnySequence/AnyIterator)

Utilisez AnySequence et AnyIterator pour effacer les types concrets de séquences et d’itérateurs, afin que les API puissent renvoyer « une séquence de T » sans exposer l’implémentation.

Schémas d’effacement de type (AnySequence/AnyIterator) est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 3 leçons au total.

Pourquoi l'effacement de type ?

L'effacement de type masque les types concrets derrière une enveloppe stable. Avec AnySequence et AnyIterator, vous pouvez renvoyer « une séquence d'éléments » sans exposer la structure interne.

La limitation

Une séquence possède un type associé (élément), si bien que le protocole seul ne peut pas être utilisé comme type de valeur concret. Nous avons besoin d'une enveloppe.

// 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>.

Enveloppe AnySequence

AnySequence enveloppe n'importe quelle séquence concrète (tableau, ensemble ou séquence personnalisée) et expose un type uniforme comme AnySequence<entier>.

// 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("")

Enveloppe AnyIterator

AnyIterator enveloppe une fermeture qui produit des éléments. Enveloppez-le dans AnySequence pour exposer une séquence complète.

// 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("")

Type de retour uniforme

L'effacement de type permet à une seule fonction de renvoyer des implémentations différentes sous un seul type de retour stable (AnySequence<entier>).

// 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("")

Quand l’utiliser

Utilisez l’effacement de type lorsque :

  • Vous souhaitez masquer les détails d’implémentation des séquences/itérateurs.
  • Les API doivent renvoyer le même type, quelles que soient les branches internes.
  • Les génériques deviennent trop exposés aux frontières de l’API.

Remarques : préférez les génériques pour les performances et la clarté à l’intérieur des modules ; utilisez AnySequence/AnyIterator aux frontières lorsque cela est nécessaire.

Rôle d’AnySequence

Vérification rapide : que vous apporte AnySequence<T> ?

Récapitulatif

Récapitulatif : encapsulez des séquences/itérateurs concrets avec AnySequence / AnyIterator pour effacer les types et renvoyer « une séquence de T » depuis des API flexibles.

Questions Fréquemment Posées

La leçon « Schémas d’effacement de type (AnySequence/AnyIterator) » est-elle gratuite ?

Oui — le texte complet de « Schémas d’effacement de type (AnySequence/AnyIterator) » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 3 leçons au total.

Qu'est-ce que j'apprendrai dans « Schémas d’effacement de type (AnySequence/AnyIterator) » ?

Utilisez AnySequence et AnyIterator pour effacer les types concrets de séquences et d’itérateurs, afin que les API puissent renvoyer « une séquence de T » sans exposer l’implémentation. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 3.

Combien de temps prend la leçon « Schémas d’effacement de type (AnySequence/AnyIterator) » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. associatedtype et protocoles génériques
  2. Schémas d’effacement de type (AnySequence/AnyIterator)
  3. Quand utiliser les existentiels (any P) plutôt que les génériques
← Retour à Swift Academy