【SwiftUI】UIViewControllerでSwiftUIのViewを表示する

過去にUIKitで作って公開したアプリを、そっくりそのままSwiftUIに移行したかったがやり方がよくわからなかったので、表題の通りUIViewController上でSwiftUIのViewを表示しました。

UIViewController上で、SwiftUIで作ったContentViewを表示しています。.environmentObjectもここで初期化します。

override func viewDidLoad() {

        super.viewDidLoad()

        

        let vc: UIHostingController = UIHostingController(rootView: ContentView().environmentObject(Test()))

            self.addChild(vc)

            self.view.addSubview(vc.view)

            vc.didMove(toParent: self)

            vc.view.translatesAutoresizingMaskIntoConstraints = false

            vc.view.heightAnchor.constraint(equalToConstant: view.frame.height).isActive = true

            vc.view.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 0).isActive = true

            vc.view.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: 0).isActive = true

            vc.view.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true

}

        

実行すると、あたかもSwiftUIって感じになります。