Modèle Coordinator pour la communication avec les délégués
Utiliser makeCoordinator() pour transmettre les rappels des délégués UIKit à SwiftUI.
Modèle Coordinator pour la communication avec les délégués est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.
Pourquoi des coordinateurs ?
Les délégués UIKit nécessitent une référence d’objet. Les types valeur de SwiftUI ne peuvent pas servir de délégués. Le Coordinator fait le lien.
struct ImagePicker: UIViewControllerRepresentable {
@Binding var image: UIImage?
// Coordinator will be the UIImagePickerControllerDelegate
}makeCoordinator()
Implémentez makeCoordinator() en renvoyant une instance de Coordinator. SwiftUI l’appelle avant makeUIView/Controller.
func makeCoordinator() -> Coordinator {
Coordinator(self)
}La classe Coordinator
Le Coordinator est généralement une classe (pour assurer la compatibilité avec les délégués) qui contient une référence vers son représentable parent.
class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var parent: ImagePicker
init(_ parent: ImagePicker) { self.parent = parent }
}Définir le délégué
Dans makeUIViewController, affectez context.coordinator en tant que délégué.
func makeUIViewController(context: Context) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.delegate = context.coordinator
return picker
}Implémenter les méthodes du délégué
Les rappels du délégué dans le Coordinator renvoient les informations à SwiftUI en modifiant les liaisons du parent.
func imagePickerController(
_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]
) {
parent.image = info[.originalImage] as? UIImage
picker.dismiss(animated: true)
}Rappel d’annulation
Implémentez le délégué d’annulation pour fermer le sélecteur et, si nécessaire, informer SwiftUI.
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true)
}Source de données via Coordinator
Les Coordinators peuvent également implémenter des protocoles de source de données, comme UITableViewDataSource, pour les vues de tableau ou de collection.
class Coordinator: NSObject, UITableViewDataSource {
var parent: MyTableView
init(_ p: MyTableView) { parent = p }
func tableView(_ tv: UITableView, numberOfRowsInSection s: Int) -> Int { parent.items.count }
func tableView(_ tv: UITableView, cellForRowAt ip: IndexPath) -> UITableViewCell {
let cell = tv.dequeueReusableCell(withIdentifier: "cell", for: ip)
cell.textLabel?.text = parent.items[ip.row]
return cell
}
}Maintenir le Coordinator à jour
Lorsque SwiftUI effectue un nouveau rendu, updateUIViewController est appelée. Si nécessaire, mettez à jour la référence du Coordinator vers le nouveau parent.
func updateUIViewController(_ vc: UIImagePickerController, context: Context) {
context.coordinator.parent = self
}Plusieurs délégués
Un coordinateur peut se conformer à plusieurs protocoles de délégué et centraliser tous les rappels UIKit.
class Coordinator: NSObject,
UIScrollViewDelegate,
UITextViewDelegate,
UISearchBarDelegate { ... }Coordinator contre @Binding
Utilisez @Binding pour transmettre simplement une valeur ; utilisez un Coordinator lorsque UIKit exige une référence vers un délégué.
// Simple: @Binding var text: String -> updateUIView writes uiView.text = text
// Complex: coordinator mediates UITextViewDelegate -> parent.text = textView.textCycle de vie du Coordinator
Le Coordinator est créé une seule fois par représentable et existe aussi longtemps que le représentable se trouve dans l’arborescence des vues.
// makeCoordinator called once → stable delegate reference
// updateUIView called many times → push state changesVérification rapide
Quelle méthode devez-vous implémenter dans UIViewControllerRepresentable pour créer l’objet servant de pont vers le délégué ?
Récapitulatif de la leçon
Modèle Coordinator : implémentez makeCoordinator(), créez une classe conforme aux protocoles de délégué UIKit, affectez-la via context.coordinator dans makeUIViewController, puis renvoyez les informations à SwiftUI au moyen des liaisons stockées dans parent.
Questions Fréquemment Posées
La leçon « Modèle Coordinator pour la communication avec les délégués » est-elle gratuite ?
Oui — le texte complet de « Modèle Coordinator pour la communication avec les délégués » 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 « Modèle Coordinator pour la communication avec les délégués » ?
Utiliser makeCoordinator() pour transmettre les rappels des délégués UIKit à SwiftUI. 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 4.
Combien de temps prend la leçon « Modèle Coordinator pour la communication avec les délégués » ?
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
- UIViewRepresentable : intégrer des vues UIKit
- Modèle Coordinator pour la communication avec les délégués
- UIViewControllerRepresentable
- UIHostingController : SwiftUI dans UIKit