Skip to content

Instantly share code, notes, and snippets.

@andrew-nemtsev
Forked from Gurdeep0602/AppStoryboard.swift
Created June 9, 2018 10:14
Show Gist options
  • Save andrew-nemtsev/c1250c1fdb7d45ec29ee66b5ee3a8b67 to your computer and use it in GitHub Desktop.
Save andrew-nemtsev/c1250c1fdb7d45ec29ee66b5ee3a8b67 to your computer and use it in GitHub Desktop.
AppStoryboard enumeration
//
// AppStoryboards.swift
// AppStoryboards
//
// Created by Gurdeep on 15/12/16.
// Copyright © 2016 Gurdeep. All rights reserved.
//
import Foundation
import UIKit
enum AppStoryboard : String {
case Main
var instance : UIStoryboard {
return UIStoryboard(name: self.rawValue, bundle: Bundle.main)
}
func viewController<T : UIViewController>(viewControllerClass : T.Type, function : String = #function, line : Int = #line, file : String = #file) -> T {
let storyboardID = (viewControllerClass as UIViewController.Type).storyboardID
guard let scene = instance.instantiateViewController(withIdentifier: storyboardID) as? T else {
fatalError("ViewController with identifier \(storyboardID), not found in \(self.rawValue) Storyboard.\nFile : \(file) \nLine Number : \(line) \nFunction : \(function)")
}
return scene
}
func initialViewController() -> UIViewController? {
return instance.instantiateInitialViewController()
}
}
extension UIViewController {
// Not using static as it wont be possible to override to provide custom storyboardID then
class var storyboardID : String {
return "\(self)"
}
static func instantiate(fromAppStoryboard appStoryboard: AppStoryboard) -> Self {
return appStoryboard.viewController(viewControllerClass: self)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment