From 2f9a2f78a3323e72a573d161fd400b8063fba9ab Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Tue, 11 Apr 2023 14:23:58 +0200 Subject: [PATCH] Defined the Router protocol. --- .../Sources/Core/Protocols/Router.swift | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Apps/Locations/Libraries/Sources/Core/Protocols/Router.swift diff --git a/Apps/Locations/Libraries/Sources/Core/Protocols/Router.swift b/Apps/Locations/Libraries/Sources/Core/Protocols/Router.swift new file mode 100644 index 0000000..7264feb --- /dev/null +++ b/Apps/Locations/Libraries/Sources/Core/Protocols/Router.swift @@ -0,0 +1,55 @@ +// +// Router.swift +// Core +// +// Created by Javier Cicchelli on 11/04/2023. +// Copyright © 2023 Röck+Cöde. All rights reserved. +// + +import UIKit + +/// This protocol defines how view controllers will be shown and dismissed. +public protocol Router: AnyObject { + + // MARK: Typealiases + + typealias OnDismissedClosure = () -> Void + + // MARK: Functions + + /// Present a view controller animatedly or not, dependencing on the given `animated` parameter, and also pass a closure that should be called on dismissal. + /// - Parameters: + /// - viewController: A `UIViewController` view controller instance to present. + /// - animated: A boolean that represents whether the view controller should be dismissed animatedly or not. + /// - onDismiss: A closure to be called or executed when the presented view controller is dismissed. + func present( + _ viewController: UIViewController, + animated: Bool, + onDismiss: OnDismissedClosure? + ) + + /// Dismiss a view controller animatedly or not, dependencing on the given `animated` parameter. + /// - Parameter animated: A boolean that represents whether the view controller should be dismissed animatedly or not. + func dismiss(animated: Bool) + +} + +// MARK: - Router+Implementations + +public extension Router { + + // MARK: Functions + + /// Present a view controller animatedly or not, dependencing on the given `animated` parameter. + /// - Parameters: + /// - viewController: A `UIViewController` view controller instance to present. + /// - animated: A boolean that represents whether the view controller should be dismissed animatedly or not. + func present(_ viewController: UIViewController, animated: Bool) { + present( + viewController, + animated: animated, + onDismiss: nil + ) + } + +}