1. ホーム
  2. swift

[解決済み] 既存のUIKitアプリケーションにSwiftUIビューを含める

2022-08-25 09:23:48

質問

既存のUIKitアプリケーションと並行して、SwiftUIでビューを構築することは可能でしょうか?

私はObjective-Cで書かれた既存のアプリケーションを持っています。私はSwift 5に移行し始めました。既存のUIKitの.xibのビューと一緒にSwiftUIを使用できるかどうか疑問に思っています。

つまり、私は同じアプリでSwiftUIで構築されたいくつかのビューとUIKitで構築されたいくつかの他のビューが欲しいのです。もちろん、2つを混在させることはできません。

SomeObjCSwiftProject/
    SwiftUIViewController.swift
    SwiftUIView.xib
    UIKitViewController.swift
    UIKitView.xib

互いに協力し合う

どのように解決するのか?

edit 05/06/19: @Departamento B さんの回答で示唆された UIHostingController についての情報を追加しました。彼に謝意を表します。


UIKitの中でSwiftUIを使う

UIKitの中でSwiftUIを使うには SwiftUI コンポーネントを既存の UIKit をラップすることで、既存の SwiftUI ViewUIHostingController のようにします。

let swiftUIView = SomeSwiftUIView() // swiftUIView is View
let viewCtrl = UIHostingController(rootView: swiftUIView)

をオーバーライドすることも可能です。 UIHostingController を上書きして、自分のニーズに合わせてカスタマイズすることもできます。 preferredStatusBarStyle を介して動作しない場合は、手動で SwiftUI を介して期待通りに動作しない場合は、手作業で行います。

UIHostingController は文書化されています はこちら .


SwiftUIでUIKitを使う

もし既存の UIKit ビューで使用する必要があります。 SwiftUI 環境では UIViewRepresentable プロトコルは助けになります! これは、文書化された はこちら で、実際に動いているところを見ることができます。 この のアップル公式チュートリアルで見ることができます。


互換性

このため SwiftUI は iOS 13 では使用できませんのでご注意ください。 SwiftUI は iOS 13 以降でのみ利用可能です。参照 これ の投稿を参照してください。

を使用したい場合は SwiftUI を使いたい場合、iOS 13 未満をターゲットとするプロジェクトで SwiftUI 構造体を @available(iOS 13.0.0, *) 属性を持つ構造体です。