Skip to content

Instantly share code, notes, and snippets.

import Foundation
import ARoute
protocol Route {
var path: String { get }
var registrationPath: String { get }
var redirectRoute: Route { get }
func getViewController(parameters: [String: Any]?, embeddingType: RouteEmbeddingType?) -> UIViewController?
func getEmbeddingViewController(parameters: [String : Any]?, embeddingType: RouteEmbeddingType?) -> UIViewController?
func map(parameters: [String: Any]?, embeddingType: RouteEmbeddingType?) -> ARouteRequestExecutable
import Foundation
import ARoute
protocol RouteProvider {
var router: ARoute { get }
var routes: [String: ARoutable.Type] { get }
var protectedRoutes: [Route] { get }
func open(route: Route, transitionType: RouteTransitionType, animated: Bool, parameters: [String: Any]?, embeddingType: RouteEmbeddingType?)
}
import UIKit
import ARoute
final class HomeViewController: UIViewController, ARoutable {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
required init?(routeResponse: ARouteResponse) {
super.init(nibName: nil, bundle: nil)
import Foundation
import ARoute
enum RouteEmbeddingType {
case navigationController
case tabBarController
}
import Foundation
import ARoute
enum RouteTransitionType {
case pushWithDelegate(navigationControllerDelegate: UINavigationControllerDelegate)
case push
case modal
case custom(transitioningDelegate: UIViewControllerTransitioningDelegate)
func performTransition(routeRequest: ARouteRequestExecutable) {
@aronbalog
aronbalog / Routing_Proposal.md
Created March 26, 2018 02:06
CoreNavigation 1.0.0 routing

Routing:

Defining view controller
class UserProfileViewController: UIViewController, DataReceivingViewController {
    typealias DataType = User

    func didReceiveData(_ data: User) {
 // configure UI with data
extension Array {
func flattened<T>() -> [T] where Element == T? {
return flatMap { $0 }
}
}
let array: [String?] = [
"gimme",
"some",
nil,
import CoreNavigation
struct PersonProfile: Destination {
typealias ViewControllerType = PersonProfileViewController
let personId: String
init(_ personId: String) {
self.personId = personId
}
import CoreNavigation
class PersonProfileViewController: UIViewController, DataReceivable {
// DataReceivable associatedtype
typealias DataType = Person
func didReceiveData(_ data: Person) {
// configure UI with data
}
import CoreNavigation
// will fetch Person with personId
// and present PersonProfileViewController
// which will receive Person instance
// in didReceiveData(_:) method
Navigation.present { $0
.to(PersonProfile("sherlock_holmes"))
}