// // Coordinator.swift // foray // // Created by Nicholas Tay on 21/3/2022. // Based on code from Paul Hudson on Hacking with Swift // (https://www.hackingwithswift.com/articles/71/how-to-use-the-coordinator-pattern-in-ios-apps) // import Foundation import UIKit protocol Coordinator { var childCoordinators: [Coordinator] { get set } var navigationController: UINavigationController { get set } func start() } protocol Coordinated: UIViewController { associatedtype CoordinatorType: Coordinator var coordinator: CoordinatorType? { get set } } extension Coordinator { func push(vc: T, animated: Bool = true) { vc.coordinator = self as? T.CoordinatorType navigationController.pushViewController(vc, animated: animated) } }