既存のUIKitアプリケーションにSwiftUIビューを含める 質問する

既存のUIKitアプリケーションにSwiftUIビューを含める 質問する

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

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

つまり、同じアプリ内に SwiftUI で構築されたビューと UIKit で構築されたビューをいくつか用意したいということです。もちろん、この 2 つを混在させるわけではありません。

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

互いに協力し合う

ベストアンサー1

編集 05/06/19: @Departamento B の回答で提案された UIHostingController に関する情報を追加しました。クレジットは彼に帰属します。


UIKit内でSwiftUIを使用する

次のように を にラップすることで、既存の環境SwiftUIでコンポーネントを使用できます。UIKitSwiftUI ViewUIHostingController

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

期待どおりに動作しない場合はUIHostingController、手動で設定するなどして、必要に応じて上書きしてカスタマイズすることもできます。preferredStatusBarStyleSwiftUI

UIHostingController文書化されているここ


SwiftUI内でUIKitを使用する

既存のUIKitビューを環境で使用する必要がある場合はSwiftUIUIViewRepresentableプロトコルが役立ちます。文書化されています。ここそして、実際に動作しているのを見ることができますこれ公式 Apple チュートリアル。


互換性

iOS 13以上でのみ利用可能でありSwiftUI、iOS 13未満のiOSバージョンでは使用できませんのでご注意ください。SwiftUIこれ詳細については投稿をご覧ください。

SwiftUIiOS 13 未満のターゲットのプロジェクトで使用する場合は、SwiftUI構造体に@available(iOS 13.0.0, *)属性のタグを付ける必要があります。

おすすめ記事