初めに
この記事はこちらの本を参考にしています。
https://peaks.cc/books/iOS_architecture
詳しく知りたい方はこちらを読みましょう。
MVVMやMVP,クリーンアーキテクチャ,Reduxなど様々なアーキテクチャについて書いてあるので本当にためになります。
全ての内容を事細かに書くと本のネタバレになってしまうので、自分なりにざっくりまとめて書きたいと思います。
Routerとは
viewControllerから画面遷移の処理を切り離すことで画面遷移の部分を見やすくし、viewControllerに記述する量を減らすことができる。
TransitionerとRouterに分けます。
Transitionerでは下のようにprotocolextensionを使って画面遷移の共通部分を初期化します。
protocol Transitioner: AnyObject where Self: UIViewController {
func pushViewController(_ viewController: UIViewController,animated: Bool)
...
}
extension Transitioner {
func pushViewController(_ viewController: UIViewController,animated: Bool) {
guard let nc = navigationController = else { return }
nc.pushViewController(viewController,animated: animated)
}
...
}
こいつをviewControllerに準拠させます。
あとはRouterでModelなりControllerなりを初期化し、Transitionerの処理を呼び出して画面遷移する処理を書きます。
このRouterをPresenterなりviewControllerなりで呼び出せば完成です。
何回も書きますが詳しいコードが見たい方は上の本を読んでみてください。
流れとしては
- PresenterやviewContollerなどでRouterの画面遷移の処理を呼び出す。
- RouterはModelやPresenterを初期化しTransitionerの処理を呼び出し、画面遷移する。
- 結果として画面遷移の処理はPresenterとTransitionerが担うのでviewControllerから画面遷移の処理を切り出せる
ということになります。
最後に
本の内容が割とほとんどなので詳しいコードなどはあまり書きませんでしたが、考えた方だけ分かってもらえると幸いです。詳しく勉強したい方は3度目ですが本買いましょう。
画面遷移の処理をまとめて切り出しておけるのは便利だし見やすくていいですね。