0Pricing
Swift Academy · Lezione

Il pattern Coordinator

Centralizzi la logica del flusso di navigazione.

Il pattern Coordinator è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 3 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.

Il problema della navigazione

Quando le view eseguono direttamente il push o la presentazione di altre view, la logica di navigazione si ritrova sparsa nell'app. Ogni schermata deve conoscere quella successiva, creando un forte accoppiamento.

Il pattern Coordinator risolve questo problema spostando la navigazione in oggetti dedicati.

Che cos'è un Coordinator?

Un Coordinator è un oggetto il cui unico compito è gestire il flusso di navigazione. Decide quale schermata mostrare dopo e crea i view controller o le view da visualizzare.

Le view non devono più occuparsi del routing: si limitano a segnalare gli eventi e il Coordinator decide come procedere.

Il protocollo Coordinator

La maggior parte delle implementazioni parte da un piccolo protocollo a cui ogni Coordinator si conforma.

protocol Coordinator: AnyObject {
    var childCoordinators: [Coordinator] { get set }
    func start()
}

Un Coordinator concreto

Un Coordinator concreto possiede un navigation controller e costruisce la prima schermata in start().

final class AppCoordinator: Coordinator {
    var childCoordinators: [Coordinator] = []
    let navigationController: UINavigationController

    init(navigationController: UINavigationController) {
        self.navigationController = navigationController
    }

    func start() {
        let vc = HomeViewController()
        navigationController.setViewControllers([vc], animated: false)
    }
}

Disaccoppiare le view dal routing

Il vantaggio principale è che una view non costruisce più la schermata successiva. Invece, comunica al proprio Coordinator che si è verificato un evento, e il Coordinator gestisce il routing.

In questo modo una schermata può essere riutilizzata in flussi diversi senza modificarne il codice.

Segnalare gli eventi al Coordinator

Le view comunicano con il proprio Coordinator tramite un delegate o una closure. La view non sa quale sarà la destinazione successiva.

protocol HomeViewControllerDelegate: AnyObject {
    func homeDidSelectProfile()
}

final class HomeViewController: UIViewController {
    weak var delegate: HomeViewControllerDelegate?

    func profileTapped() {
        delegate?.homeDidSelectProfile()
    }
}

Gestire il routing

Il Coordinator si conforma al delegate e decide come navigare quando si verifica l'evento.

extension AppCoordinator: HomeViewControllerDelegate {
    func homeDidSelectProfile() {
        let profile = ProfileViewController()
        navigationController.pushViewController(profile, animated: true)
    }
}

Coordinator figli

I flussi più complessi, come onboarding e checkout, hanno i propri Coordinator figli. Il Coordinator padre avvia un figlio e lo conserva in childCoordinators affinché rimanga in memoria.

func startOnboarding() {
    let child = OnboardingCoordinator(navigationController: navigationController)
    childCoordinators.append(child)
    child.start()
}

Evitare i memory leak

Poiché il padre conserva i figli, è necessario rimuovere un figlio quando il relativo flusso termina, altrimenti si verifica un memory leak. Un approccio comune consiste nell'usare una callback di completamento.

func childDidFinish(_ child: Coordinator) {
    childCoordinators.removeAll { $0 === child }
}

Coordinator con SwiftUI

In SwiftUI, i Coordinator gestiscono spesso il percorso di un NavigationStack. Il Coordinator possiede un percorso osservabile e le view vi aggiungono le route.

final class Router: ObservableObject {
    @Published var path: [Route] = []

    func push(_ route: Route) {
        path.append(route)
    }
}

enum Route: Hashable { case profile, settings }

Riepilogo dei vantaggi

Il pattern Coordinator offre:

  • View riutilizzabili che non contengono la navigazione in modo rigido
  • Logica centralizzata del flusso, facile da modificare
  • Routing testabile, separato dall'interfaccia utente
  • Flussi componibili tramite Coordinator figli

Verifica rapida

Verifichi la Sua comprensione dei Coordinator.

Riepilogo

Ha imparato il pattern Coordinator:

  • I Coordinator gestiscono la navigazione, mantenendo le view indipendenti dal routing
  • Le view segnalano gli eventi al Coordinator tramite delegate o closure
  • I Coordinator figli modellano flussi autonomi
  • I figli devono essere rimossi al termine dei flussi per evitare memory leak

In combinazione con MVVM, i Coordinator completano un'architettura pulita e testabile.

Domande Frequenti

La lezione «Il pattern Coordinator» è gratuita?

Sì — il testo completo di «Il pattern Coordinator» è 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 «Il pattern Coordinator»?

Centralizzi la logica del flusso di navigazione. 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 3 di 4.

Quanto tempo richiede la lezione «Il pattern Coordinator»?

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. Il pattern MVVM
  2. Collegamento dei view model alle view
  3. Il pattern Coordinator
  4. Test dei view model
← Torna a Swift Academy