Skip to content

Instantly share code, notes, and snippets.

@ashishkanani
Created November 28, 2022 15:10
Show Gist options
  • Save ashishkanani/9bc107c9af213baae574f6697dc0098c to your computer and use it in GitHub Desktop.
Save ashishkanani/9bc107c9af213baae574f6697dc0098c to your computer and use it in GitHub Desktop.
//
// AppStoryboard.swift
//
// USAGE
// let greenScene = GreenVC.instantiate(fromAppStoryboard: .Main)
import Foundation
import AVKit
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