LoginSignup
1
2

[SwiftUI]UIKitプロジェクトへの導入事例まとめ

Posted at

UIKitからSwiftUIへの書き換えを行なっている方をまとめています!:0
参考にしたい部分を書き出してます!

導入事例

Navitime

一つずつ認識のすり合わせをして、みんなが自信を持って書けたら嬉しい。
話し合い大事!

  • アプリのベース部分、共通機構のレビュー
  • モブプロでの開発
  • 複数パターンの開発

  • 再描画を抑制する
    → bodyの中身を意識。別のStructで定義するなどの工夫。
    → ObservableObjectの参照のみで、バインディングしない場合、@ObservableObjectを付けずに、普通のプロパティとして定義する(再評価の対象から外す)
  • UIKitとSwiftUIの混在は極力避ける
    → 混在させた場合で、データの共有が必要な場合、ObservableObjectを使用して共有を行うと良い
    @StateObjectでObservableObjectクラスのインスタンス化をして、親から子に渡す際は@ObservedObjectを使用して共有

ZOZOTOWN

  • SwiftUIを小さく導入する
    → UIViewとして書くであろう部分をSwiftUIのViewで実装する(UIViewの中でもまた小さく区切る必要はある)
  • SwiftUIで実装する際は、UIKitの実装へと戻る可能性も考えたリソース配分・スケジューリングを行う
  • UICollectionViewCell, UITableViewCellでSwiftUIを使わない

Retty

  • ほとんどがUIViewController + UIHostingControllerの構成
  • 画面の一部からSwiftUIを適用していく形
  • 画面遷移は基本的にUIViewController系統のものを使用して、NavigationLinkは使ってない
  • 店舗詳細ページなどは、少しずつ施策開発や機能修正をする中でSwiftUIへの置き換えを進めている
  • UITableViewはそのままでUITableViewCellにUIHostingControllerを持たせて、セルのコンテンツはSwiftUIのViewを表示する手法(不具合が発生するとの記載がある)

MIXI

  • View+ロジック(アーキテクチャ)まで含めてSwiftUIに合わせて変更
  • 画面遷移はUIKit
  • UIがStateを監視して際レンダリングを行うアーキテクチャ
  • MVVM + Clean Architectureへの変更(これ使ってる人多い)
    Mockを作成する手間が省ける。
    Previewの高速化。
    スクリーンショット 2024-05-14 13.35.45.png

ニフティ

  • ViewControllerを使用してUIHostingControllerを介したSwiftUIを置く
  • データ参照はObservableObject
  • SwiftUIからViewControllerへのイベント受け渡しはdelegate

クックパッド

  • VIPERベースのLayered Architecture
  • View層のみでSwiftUIを使う
  • 画面単位で完全に切り分けられているため、SwiftUIに困難が生じたらすぐにそこだけでもUIKitに戻せるリスク対策
  • 画面(VIPERシーン)ごとに従来通りUIViewControllerがあり、そこに橋渡し役のUIHostingControllerを介して、SwiftUIで書かれたVIewが置かれる
    スクリーンショット 2024-05-14 14.33.51.png
  • 遅延読み込み(LazyVStack, LazyHStack)の使用

まとめ

記事にしていただけるのは本当に感謝です!‥🙇
既存プロジェクトへ導入する際は再描画処理や、UIKitとの共存、アーキテクチャの選定など気をつけていきたいと思います!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2