So, looking back over the last code, I realised that I was overthinking it massively. The original reasoning behind it didn’t hold up, so I fixed it.
protocol NavigationProtocol {
func viewController(forIdentifier identifier: StoryboardIdentifier) -> UIViewController
}
extension NavigationProtocol {
private var storyboard: UIStoryboard {
return UIStoryboard(name: "Main", bundle: nil)
}
func viewController(forIdentifier identifier: StoryboardIdentifier) -> UIViewController {
return storyboard.instantiate(withIdentifier: identifier)
}
}
Yep, that’s a bit smaller. Hooray.
Bonus - time for unit tests ;)
func testInstantiateViewController_Splash() {
let viewController = sut.viewController(forIdentifier: .splashViewController)
XCTAssertTrue(viewController is SplashViewController)
}
func testInstantiateViewController_MainMenu() {
let viewController = sut.viewController(forIdentifier: .mainMenuViewController)
XCTAssertTrue(viewController is MainMenuViewController)
}