0Pricing
Swift Academy · Lezione

Pattern Coordinator per la comunicazione con i delegate

Utilizzare makeCoordinator() per inoltrare a SwiftUI le callback dei delegate UIKit.

Pattern Coordinator per la comunicazione con i delegate è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.

Perché utilizzare i Coordinator?

I delegate UIKit richiedono un riferimento a un oggetto. I tipi valore di SwiftUI non possono essere delegate. Il Coordinator funge da collegamento.

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

makeCoordinator()

Implementi makeCoordinator() restituendo un'istanza di Coordinator. SwiftUI lo chiama prima di makeUIView/Controller.

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

La classe Coordinator

Il Coordinator è in genere una classe (per la compatibilità con i delegate) che mantiene un riferimento al proprio representable padre.

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

Impostazione del delegate

In makeUIViewController, assegni context.coordinator come delegate.

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

Implementazione dei metodi delegate

Le callback del delegate nel Coordinator aggiornano SwiftUI modificando i binding del padre.

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

Callback di annullamento

Implementi il delegate per l'annullamento per chiudere il selettore e, facoltativamente, notificare SwiftUI.

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

Origine dei dati tramite Coordinator

I Coordinator possono anche implementare protocolli di origine dei dati (ad esempio UITableViewDataSource) per viste tabella o raccolta.

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

Aggiornamento del Coordinator

Quando SwiftUI esegue nuovamente il rendering, viene chiamato updateUIViewController. Se necessario, aggiorni il riferimento del Coordinator al nuovo padre.

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

Più delegate

Un Coordinator può conformare a più protocolli delegate, centralizzando tutte le callback di UIKit.

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

Coordinator rispetto a @Binding

Utilizzi @Binding per un semplice passaggio di valori; utilizzi un Coordinator quando UIKit richiede un riferimento a un delegate.

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

Ciclo di vita del Coordinator

Il Coordinator viene creato una volta per ogni representable e rimane attivo finché il representable appartiene all'albero delle viste.

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

Verifica rapida

Quale metodo deve implementare in UIViewControllerRepresentable per creare l'oggetto che funge da collegamento con il delegate?

Riepilogo della lezione

Il modello Coordinator: implementi makeCoordinator(), crei una classe conforme ai protocolli delegate di UIKit, la assegni tramite context.coordinator in makeUIViewController e aggiorni SwiftUI tramite i binding memorizzati in parent.

Domande Frequenti

La lezione «Pattern Coordinator per la comunicazione con i delegate» è gratuita?

Sì — il testo completo di «Pattern Coordinator per la comunicazione con i delegate» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.

Cosa imparerò in «Pattern Coordinator per la comunicazione con i delegate»?

Utilizzare makeCoordinator() per inoltrare a SwiftUI le callback dei delegate UIKit. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Pattern Coordinator per la comunicazione con i delegate»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. UIViewRepresentable: racchiudere le view UIKit
  2. Pattern Coordinator per la comunicazione con i delegate
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI dentro UIKit
← Torna a Swift Academy