既存の 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
でコンポーネントを使用できます。UIKit
SwiftUI
View
UIHostingController
let swiftUIView = SomeSwiftUIView() // swiftUIView is View
let viewCtrl = UIHostingController(rootView: swiftUIView)
期待どおりに動作しない場合はUIHostingController
、手動で設定するなどして、必要に応じて上書きしてカスタマイズすることもできます。preferredStatusBarStyle
SwiftUI
UIHostingController
文書化されているここ。
SwiftUI内でUIKitを使用する
既存のUIKit
ビューを環境で使用する必要がある場合はSwiftUI
、UIViewRepresentable
プロトコルが役立ちます。文書化されています。ここそして、実際に動作しているのを見ることができますこれ公式 Apple チュートリアル。
互換性
iOS 13以上でのみ利用可能でありSwiftUI
、iOS 13未満のiOSバージョンでは使用できませんのでご注意ください。SwiftUI
これ詳細については投稿をご覧ください。
SwiftUI
iOS 13 未満のターゲットのプロジェクトで使用する場合は、SwiftUI
構造体に@available(iOS 13.0.0, *)
属性のタグを付ける必要があります。