【Xcode/Swift】異なるStoryboardへの画面遷移をExtensionで簡潔に書く方法

Storyboardの異なる画面遷移は、以下の3行書かなければなりません。。画面遷移のたびに以下のコードを記述するのは、めんどくさいので、、Extensionで書きます。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let mainVC = storyboard.instantiateViewController(withIdentifier: "Main") as! MainViewController
self.navigationController?.pushViewController(mainVC, animated: true)

Extensionを使って楽に画面遷移する方法

準備

STEP.1

UIViewController-Extension.swiftというファイルを作り、以下のコードを記述します。

import Foundation
import UIKit

extension UIViewController {
    func pushViewControllerOverNavigation<T: UIViewController>(_ storyboard: String, _ additionalOperation: ((T) -> ())? = nil) {
        let storyboard = UIStoryboard(name: storyboard, bundle: nil)
        let nextVC = storyboard.instantiateInitialViewController()
        if let nextVC = nextVC as? T {
            additionalOperation?(nextVC)
        }
        navigationController?.pushViewController(nextVC!, animated: true)
    }
}
STEP.2

遷移先のViewControllerのIs Initial View Controllerのチェックを忘れずにつけてください。

STEP.3
以下の命名規則に従ってください。

Storyboard:Main.storyboard
Identifier:Main
Class:MainViewController.swift

これで準備完了です。

使い方

画面遷移したいところで、以下の1行を記述すると画面遷移できます。

self.pushViewControllerOverNavigation("Next")

遷移先に値を渡したい時は以下のように書きます。

self.pushViewControllerOverNavigation("Next") { (vc: NextViewController) in
    vc.hogehoge = "hpgehoge"
}