43 lines
1.3 KiB
Swift
Executable File
43 lines
1.3 KiB
Swift
Executable File
/*
|
|
Copyright 2019-2024 New Vector Ltd.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
Please see LICENSE in the repository root for full details.
|
|
*/
|
|
|
|
import UIKit
|
|
|
|
/// Protocol describing a [Coordinator](http://khanlou.com/2015/10/coordinators-redux/).
|
|
/// Coordinators are the objects which control the navigation flow of the application.
|
|
/// It helps to isolate and reuse view controllers and pass dependencies down the navigation hierarchy.
|
|
protocol Coordinator: AnyObject {
|
|
|
|
/// Starts job of the coordinator.
|
|
func start()
|
|
|
|
/// Child coordinators to retain. Prevent them from getting deallocated.
|
|
var childCoordinators: [Coordinator] { get set }
|
|
|
|
/// Stores coordinator to the `childCoordinators` array.
|
|
///
|
|
/// - Parameter childCoordinator: Child coordinator to store.
|
|
func add(childCoordinator: Coordinator)
|
|
|
|
/// Remove coordinator from the `childCoordinators` array.
|
|
///
|
|
/// - Parameter childCoordinator: Child coordinator to remove.
|
|
func remove(childCoordinator: Coordinator)
|
|
}
|
|
|
|
// `Coordinator` default implementation
|
|
extension Coordinator {
|
|
|
|
func add(childCoordinator coordinator: Coordinator) {
|
|
childCoordinators.append(coordinator)
|
|
}
|
|
|
|
func remove(childCoordinator: Coordinator) {
|
|
self.childCoordinators = self.childCoordinators.filter { $0 !== childCoordinator }
|
|
}
|
|
}
|