UIViewControllerでSwiftUIのビューを表示する

はじめに

みなさんはSwiftUIを使用しているでしょうか。
私はまだそこまでちゃんとキャッチアップできておらず、とりあえずはUIKitメインで一部のビューのみSwiftUIにリプレイスしていけば良いかと呑気に考えています。
本記事では、UIViewControllerでSwiftUIのビューを表示するために利用できるUIHostingControllerについて説明しています。

UIHostingController

UIHostingControllerは、SwiftUIのView階層を管理するUIKitのViewControllerです。

SwiftUIのビューをUIKitのビュー階層に統合したい場合は、以下のようにUIHostingControllerオブジェクトを作成し、rooViewプロパティにSwiftUIビューを指定します。

let hc = UIHostingController(rootView: SwiftUIView())

あとはViewControllerと同じように取り扱うことができます。

モーダルで画面を表示したい場合は、

present(hc)

で良いですし、子ビューコントローラーとして扱いたい場合は、

addChild(hc)
view.addsubView(hc.view)
hc.didMove(toParent: self)

というように、UIViewControllerと同じように扱います。

最後に

UIHostingControllerのおかげで、UIKitで実装されたプロジェクトに部分的にSwiftUIを導入することを可能にしてくれています🙌

しばらくは画面遷移などはUIViewControllerに任せて、SwiftUIはビューを構成することだけに利用していきたいなと思います。

参考文献

この記事は、以下の情報を参考にしました。