Swift Academy · Leçon

Transformer et combiner des flux

Utilisez flatMap, merge, combineLatest et zip.

Leçon 1 sur 413 étapes

Transformer et combiner des flux est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. 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 4 leçons au total.

Travailler avec des flux

Dans Combine, un publisher émet un flux de valeurs au fil du temps. La véritable puissance vient des opérateurs qui transforment et combinent ces flux pour en créer de nouveaux.

Cette leçon présente les principaux opérateurs de transformation et de combinaison : flatMap, merge, combineLatest et zip.

map ou flatMap

map transforme chaque valeur en une autre valeur. flatMap va plus loin : il transforme chaque valeur en un nouveau publisher, puis aplatit les résultats en un flux unique.

Utilisez flatMap lorsque chaque entrée doit déclencher une autre opération asynchrone.

flatMap en action

Ici, un flux d’identifiants utilisateur est transformé en un flux de requêtes réseau, puis aplati en un seul flux d’utilisateurs.

userIdPublisher
    .flatMap { id in
        apiClient.fetchUser(id: id)
    }
    .sink { user in
        print("Loaded", user.name)
    }
    .store(in: &cancellables)

Contrôler la concurrence de flatMap

Par défaut, flatMap s’abonne simultanément à tous les publishers internes. Vous pouvez limiter la concurrence avec maxPublishers afin d’éviter de saturer un serveur.

idsPublisher
    .flatMap(maxPublishers: .max(2)) { id in
        apiClient.fetchUser(id: id)
    }
    .sink { print($0) }
    .store(in: &cancellables)

merge

merge entrelace les valeurs provenant de plusieurs publishers du même type en un seul flux, en émettant chaque valeur dès sa réception.

let combined = buttonTapA
    .merge(with: buttonTapB)

combined
    .sink { print("A tap from either button") }
    .store(in: &cancellables)

combineLatest

combineLatest émet dès qu’un quelconque publisher d’entrée émet, en associant la valeur la plus récente de chacun. Il convient parfaitement à la validation de formulaires lorsque plusieurs champs doivent tous être pris en compte.

usernamePublisher
    .combineLatest(passwordPublisher)
    .map { name, pass in
        !name.isEmpty && pass.count >= 8
    }
    .sink { isValid in
        print("Form valid:", isValid)
    }
    .store(in: &cancellables)

Fonctionnement de combineLatest

Remarque : combineLatest n’émet rien tant que chaque entrée n’a pas produit au moins une valeur. Ensuite, chaque nouvelle émission d’une entrée déclenche la sortie combinée avec les dernières valeurs des autres entrées.

zip

zip associe les valeurs par indice : la première de A avec la première de B, la deuxième avec la deuxième, et ainsi de suite. Il attend que les deux côtés disposent d’une valeur à chaque position.

let names = ["Ann", "Bob", "Cy"].publisher
let ages = [30, 25, 41].publisher

names
    .zip(ages)
    .sink { name, age in
        print(name, "is", age)
    }
    .store(in: &cancellables)

combineLatest ou zip

Il est facile de confondre les deux :

  • combineLatest — se déclenche à chaque émission et utilise la valeur la plus récente de chaque entrée
  • zip — se déclenche uniquement pour les paires correspondantes selon leur indice

Utilisez combineLatest pour un état en temps réel ; utilisez zip pour aligner des résultats parallèles un à un.

Combiner pour travailler en parallèle

zip est particulièrement utile lorsque vous exécutez des requêtes indépendantes en parallèle et attendez qu’elles soient toutes terminées.

fetchProfile
    .zip(fetchSettings)
    .sink { profile, settings in
        print("Both loaded")
    }
    .store(in: &cancellables)

Enchaîner les opérateurs

Les chaînes de traitement réelles enchaînent plusieurs opérateurs afin d’exprimer de manière déclarative des flux asynchrones complexes.

searchTextPublisher
    .removeDuplicates()
    .flatMap { query in
        apiClient.search(query)
    }
    .map { results in
        results.prefix(10)
    }
    .sink { print($0) }
    .store(in: &cancellables)

Vérification rapide

Vérifiez vos connaissances sur les opérateurs.

Récapitulatif

Vous avez appris à transformer et à combiner des flux :

  • flatMap — transforme une valeur en publisher, puis aplatit le résultat
  • merge — entrelace des flux de même type
  • combineLatest — utilise la valeur la plus récente de chaque entrée et se déclenche à chaque émission
  • zip — forme des paires associées par indice

Ces opérateurs vous permettent de composer de manière déclarative une logique asynchrone complexe.

Gratuit pour commencer

Apprends Swift avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
122
Leçons
409

Questions Fréquemment Posées

La leçon « Transformer et combiner des flux » est-elle gratuite ?

Oui — le texte complet de « Transformer et combiner des flux » 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 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Transformer et combiner des flux » ?

Utilisez flatMap, merge, combineLatest et zip. 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 1 sur 4.

Combien de temps prend la leçon « Transformer et combiner des flux » ?

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. Transformer et combiner des flux
  2. Planificateurs et gestion des fils d’exécution
  3. Opérateurs de gestion des erreurs
  4. Éditeurs et abonnés personnalisés
← Retour à Swift Academy