SwiftUI - UIKit + SwiftUI

김세영·2022년 4월 25일
0

SwiftUI 정리

목록 보기
11/11
post-thumbnail
UIHostingControllerUIViewControllerRepresentableUIViewRepresentable
UIKit에서 SwiftUI 뷰를 사용SwiftUI에서 UIViewController을 사용SwiftUI에서 UIView를 사용

UIHostingController

class UIHostingController<Content> where Content : View

UIKit의 view controller에서 SwiftUI의 뷰 계층을 관리할 수 있도록 하는 컨트롤러

Overview

SwiftUI 뷰를 UIKit의 뷰 계층에 통합하고 싶을 때 UIHostingController을 사용한다.

  • 생성 시 해당 뷰 컨트롤러의 rootView에 SwiftUI 뷰를 지정
  • rootView 프로퍼티를 통해 뷰를 변경 가능
  • 다른 뷰 컨트롤러처럼 하위 뷰 컨트롤러로 표시하거나 내장하여 사용

UIViewControllerRepresentable

protocol UIViewControllerRepresentable : View where Self.Body == Never

UIKit 뷰 컨트롤러를 나타내는 뷰

Overview

SwiftUI에서 UIViewController를 생성하고 관리하기 위해 UIViewControllerRepresentable의 인스턴스를 사용

앱의 커스텀 인스턴스 중 하나에 프로토콜을 적용하고, 이를 사용하여 뷰 컨트롤러를 생성, 업데이트 및 해체(tear down)

  • 생성, 업데이트 프로세스는 SwiftUI의 동작과 유사
    이를 통해 현재 상태 정보를 사용하여 뷰 컨트롤러를 구성할 수 있다.
  • 해체 프로세스는 SwiftUI에서 뷰 컨트롤러를 깨끗하게 제거
    이를 통해 뷰 컨트롤러가 사라지고 있는 상태 등을 다른 개체에 알릴 수 있다.

시스템은 뷰 컨트롤러에서 발생하는 변경사항을 SwiftUI의 다른 부분에 자동으로 전달하지 않음

  • 상호작용을 위해서 Coordinator 인스턴스를 제공해야 함
    (델리게이트, 타겟-액션 등)

Create / Update

  • associatedtype UIViewControllerType: UIViewController
    표시할 뷰 컨트롤러의 타입
  • func makeUIViewController(context:) -> Self.UIViewControllerType
    뷰 컨트롤러를 생성하고, 초기 상태를 설정
  • func updateUIViewController(:context:)
    인자로 받은 뷰 컨트롤러를 SwiftUI에서 받은 상태를 통해 변경

Cleaning Up

  • `static func dismantleUIViewController(:coordinator:)
    표시된 뷰 컨트롤러를 제거하기 전에 정리하는 작업

Coordinator

  • func makeCoordinator() -> Self.Coordinator
    SwiftUI와 뷰 컨트롤러간의 통신을 위한 인스턴스를 생성

UIViewRepresentable

protocol UIViewRepresentable : View where Self.Body == Never

SwiftUI 뷰 계층에 UIKit 뷰를 통합하기 위한 래퍼 프로토콜

Overview

SwiftUI 인터페이스에서 UIView 객체를 생성하고 관리하기 위해 UIViewRepresentable의 인스턴스를 사용

이하 내용은 UIViewControllerRepresentable과 비슷

profile
초보 iOS 개발자입니다ㅏ

0개의 댓글