0Pricing
Swift Academy · Lección

Patrón Coordinator para la comunicación con delegates

Utilice makeCoordinator() para transmitir callbacks de delegates de UIKit a SwiftUI.

Patrón Coordinator para la comunicación con delegates es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

¿Por qué usar coordinadores?

Los delegados de UIKit requieren una referencia a un objeto. Los tipos de valor de SwiftUI no pueden actuar como delegados. El Coordinator es el puente.

struct ImagePicker: UIViewControllerRepresentable {
  @Binding var image: UIImage?
  // Coordinator will be the UIImagePickerControllerDelegate
}

makeCoordinator()

Implemente makeCoordinator() para devolver una instancia de Coordinator. SwiftUI lo llama antes que makeUIView/Controller.

func makeCoordinator() -> Coordinator {
  Coordinator(self)
}

La clase Coordinator

Normalmente, Coordinator es una clase (para ser compatible con delegados) que mantiene una referencia a su representable principal.

class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
  var parent: ImagePicker
  init(_ parent: ImagePicker) { self.parent = parent }
}

Configuración del delegado

En makeUIViewController, asigne context.coordinator como delegado.

func makeUIViewController(context: Context) -> UIImagePickerController {
  let picker = UIImagePickerController()
  picker.delegate = context.coordinator
  return picker
}

Implementación de métodos del delegado

Las llamadas del delegado en Coordinator escriben los cambios en SwiftUI modificando los bindings del elemento principal.

func imagePickerController(
  _ picker: UIImagePickerController,
  didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]
) {
  parent.image = info[.originalImage] as? UIImage
  picker.dismiss(animated: true)
}

Callback de cancelación

Implemente el delegado de cancelación para cerrar el selector y, opcionalmente, notificar a SwiftUI.

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
  picker.dismiss(animated: true)
}

Fuente de datos mediante Coordinator

Los coordinadores también pueden implementar protocolos de fuente de datos (por ejemplo, UITableViewDataSource) para vistas de tabla o colecciones.

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
  }
}

Cómo mantener actualizado Coordinator

Cuando SwiftUI vuelve a renderizar, se llama a updateUIViewController. Si es necesario, actualice la referencia de Coordinator al nuevo elemento principal.

func updateUIViewController(_ vc: UIImagePickerController, context: Context) {
  context.coordinator.parent = self
}

Varios delegados

Un coordinador puede ajustarse a varios protocolos de delegado y centralizar todas las llamadas de UIKit.

class Coordinator: NSObject,
  UIScrollViewDelegate,
  UITextViewDelegate,
  UISearchBarDelegate { ... }

Coordinator frente a @Binding

Use @Binding para una transferencia sencilla de valores; use Coordinator cuando UIKit requiera una referencia a un delegado.

// Simple: @Binding var text: String -> updateUIView writes uiView.text = text
// Complex: coordinator mediates UITextViewDelegate -> parent.text = textView.text

Ciclo de vida de Coordinator

Coordinator se crea una vez por representable y permanece mientras el representable esté en el árbol de vistas.

// makeCoordinator called once → stable delegate reference
// updateUIView called many times → push state changes

Comprobación rápida

¿Qué método debe implementar en UIViewControllerRepresentable para crear el objeto puente del delegado?

Resumen de la lección

Patrón Coordinator: implemente makeCoordinator(), cree una clase que se ajuste a los protocolos de delegado de UIKit, asígnela mediante context.coordinator en makeUIViewController y escriba los cambios en SwiftUI mediante los bindings almacenados en parent.

Preguntas frecuentes

¿La lección «Patrón Coordinator para la comunicación con delegates» es gratis?

Sí — el texto completo de «Patrón Coordinator para la comunicación con delegates» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Patrón Coordinator para la comunicación con delegates»?

Utilice makeCoordinator() para transmitir callbacks de delegates de UIKit a SwiftUI. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Patrón Coordinator para la comunicación con delegates»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. UIViewRepresentable: integración de vistas de UIKit
  2. Patrón Coordinator para la comunicación con delegates
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI dentro de UIKit
← Volver a Swift Academy