0Pricing
Swift Academy · Leçon

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

Cycle 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 changes

Vé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

  1. UIViewRepresentable : intégrer des vues UIKit
  2. Modèle Coordinator pour la communication avec les délégués
  3. UIViewControllerRepresentable
  4. UIHostingController : SwiftUI dans UIKit
← Retour à Swift Academy