Skip to content

UIHostingConfiguration(UIKit TableView ‐ SwiftUI Cell)

김민석|Minseok Kim edited this page Nov 29, 2024 · 2 revisions

🛠️ 문제 상황

문제 정의

현재 Cell Flow는

UITableView → UITableViewCell → UIHostingConfiguration → View(SwiftUI)

이렇게 되어 있습니다.

UIHostingConfiguration으로 SwiftUI의 ViewCell로 변환을 해주고 있죠

myCell.contentConfiguration = UIHostingConfiguration {
    HStack {
        Image(systemName: "star").foregroundStyle(.purple)
        Text("Favorites")
        Spacer()
    }
}

하지만 SwiftUI → UIKit을 바꾸면서 UIHostingViewController가 계속해서 생성

⚠️ 그렇게 되면 UIHostingViewController 개수 = Cell 개수
많은 ViewController가 생기게 되는거니 문제가 생기지 않을까?
에서 시작되어 작성했습니다.

UIHostingConfiguration을 사용하면서, UIHostingController 이 SwiftUI의 뷰를 ViewController로 취급하여 사용하는 것처럼, UIHostingConfiguration도 뷰컨트롤러를 생성하는 것이 아닐까 생각했습니다. 이로 인해 생성되는 모든 셀 내부에 뷰컨트롤러가 포함되는가?하는 우려를 하게되었습니다.




💡 해결 과정

HostingConfiguration 동작 이해

우선 해야할 부분이 UIHostingConfiguration이 어떻게 동작하는지 찾아보려고 했습니다.

아래와 같이 UIViewController에서 View를 가지고

image

고민해볼 부분

  • 사실 채팅방 Cell은 엄청 간단한 UI인데 굳이 SwiftUI를 사용해야할까?
    • 복잡한 UI면 SwiftUI로 구성을 하게 되면 더욱 쉽게 구현이 가능할텐데 채팅은 사실 TextView가 전부일 것 같네요..

UIHostingConfiguration과 UIHostingController의 차이점

UIHostingConfiguration은 iOS16부터 SwiftUI로 UICollectionView 또는 UITableView셀을 원활하게 빌드할 수 있도록 추가되었습니다.(WWDC22)

UIHostingControllerSwiftUI 뷰UIViewController 래핑하여 UIKit에서 사용할 수 있게 만들어주는 객체인 반면,

UIHostingConfigurationUIKit에서 SwiftUI 뷰간단하게 UI 구성 요소로 설정해줍니다. UIHostingConfiguration뷰 컨트롤러를 생성하지 않으며, UITableViewCell이나 UICollectionViewCell의 콘텐츠 구성을 할 때 사용될 수 있습니다.

따라서 UIViewController의 생성과 관련된 메모리나 성능 오버헤드를 걱정할 필요가 없겠다는 판단을 했습니다.




📜 참고 자료

https://developer.apple.com/kr/videos/play/wwdc2022/10072/

https://developer.apple.com/documentation/SwiftUI/UIHostingConfiguration

Clone this wiki locally