Wzorzec Coordinator
Centralizowanie logiki przepływu nawigacji.
Wzorzec Coordinator to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Problem z nawigacją
Gdy widoki bezpośrednio wypychają i prezentują inne widoki, logika nawigacji ulega rozproszeniu w całej aplikacji. Każdy ekran musi znać następny ekran, co tworzy silne powiązanie.
Wzorzec Coordinator rozwiązuje ten problem, wydzielając nawigację do dedykowanych obiektów.
Czym jest Coordinator?
Coordinator to obiekt, którego jedynym zadaniem jest zarządzanie przepływem nawigacji. Decyduje, który ekran pojawi się jako następny, oraz tworzy kontrolery widoków lub widoki, które należy wyświetlić.
Widoki nie muszą znać szczegółów routingu — jedynie sygnalizują zdarzenia, a Coordinator decyduje, co należy zrobić.
Protokół Coordinator
Większość implementacji zaczyna się od niewielkiego protokołu, z którym zgodny jest każdy Coordinator.
protocol Coordinator: AnyObject {
var childCoordinators: [Coordinator] { get set }
func start()
}Konkretny Coordinator
Konkretny Coordinator przechowuje kontroler nawigacji i tworzy pierwszy ekran w 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)
}
}Odseparowanie widoków od routingu
Najważniejsza korzyść jest taka, że widok nie tworzy już następnego ekranu. Zamiast tego informuje swój Coordinator, że wystąpiło zdarzenie, a Coordinator wykonuje routing.
Dzięki temu ekran można ponownie wykorzystać w różnych przepływach bez zmieniania jego kodu.
Przekazywanie zdarzeń wyżej
Widoki komunikują się ze swoim Coordinatorem za pośrednictwem delegata lub closure. Widok nie wie, dokąd prowadzi dalsza nawigacja.
protocol HomeViewControllerDelegate: AnyObject {
func homeDidSelectProfile()
}
final class HomeViewController: UIViewController {
weak var delegate: HomeViewControllerDelegate?
func profileTapped() {
delegate?.homeDidSelectProfile()
}
}Obsługa routingu
Coordinator jest zgodny z delegatem i decyduje, jak nawigować, gdy wystąpi zdarzenie.
extension AppCoordinator: HomeViewControllerDelegate {
func homeDidSelectProfile() {
let profile = ProfileViewController()
navigationController.pushViewController(profile, animated: true)
}
}Podrzędne Coordinatory
Duże przepływy, takie jak onboarding czy finalizowanie zakupu, otrzymują własne podrzędne Coordinatory. Rodzic uruchamia podrzędny Coordinator i przechowuje go w childCoordinators, aby ten pozostał aktywny.
func startOnboarding() {
let child = OnboardingCoordinator(navigationController: navigationController)
childCoordinators.append(child)
child.start()
}Unikanie wycieków pamięci
Ponieważ rodzic przechowuje podrzędne Coordinatory, po zakończeniu przepływu trzeba usunąć podrzędny Coordinator, w przeciwnym razie dojdzie do wycieku pamięci. Często stosuje się w tym celu callback informujący o zakończeniu.
func childDidFinish(_ child: Coordinator) {
childCoordinators.removeAll { $0 === child }
}Coordinatory w SwiftUI
W SwiftUI Coordinatory często sterują ścieżką NavigationStack. Coordinator przechowuje obserwowalną ścieżkę, a widoki dodają do niej trasy.
final class Router: ObservableObject {
@Published var path: [Route] = []
func push(_ route: Route) {
path.append(route)
}
}
enum Route: Hashable { case profile, settings }Podsumowanie korzyści
Wzorzec Coordinator zapewnia:
- wielokrotnego użytku widoki, które nie mają na stałe zakodowanej nawigacji
- logikę przepływu w jednym miejscu, którą łatwo zmieniać
- testowalny routing oddzielony od interfejsu użytkownika
- komponowalne przepływy dzięki podrzędnym Coordinatorom
Szybki test
Sprawdź swoją wiedzę na temat Coordinatorów.
Podsumowanie
Poznałeś(-aś) wzorzec Coordinator:
- Coordinatory zarządzają nawigacją, dzięki czemu widoki nie muszą znać routingu
- Widoki przekazują zdarzenia wyżej za pomocą delegatów lub closure
- Podrzędne Coordinatory modelują samodzielne przepływy
- Po zakończeniu przepływów należy usuwać podrzędne Coordinatory, aby uniknąć wycieków pamięci
W połączeniu z MVVM Coordinatory tworzą przejrzystą, testowalną architekturę.
Ucz się Swift dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 122
- Lekcje
- 409
Często zadawane pytania
Czy lekcja „Wzorzec Coordinator” jest bezpłatna?
Tak — pełny tekst „Wzorzec Coordinator” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wzorzec Coordinator”?
Centralizowanie logiki przepływu nawigacji. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Wzorzec Coordinator”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wzorzec MVVM
- Powiązanie view modeli z widokami
- Wzorzec Coordinator
- Testowanie view modeli