Transformer et combiner des flux
Utilisez flatMap, merge, combineLatest et zip.
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.
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
- Transformer et combiner des flux
- Planificateurs et gestion des fils d’exécution
- Opérateurs de gestion des erreurs
- Éditeurs et abonnés personnalisés