iOS프로젝트/Funch(넥스터즈)

SwiftUI 하위뷰에서 상위뷰로 DelegatePattern을 활용해 이벤트 전달하기

lgvv 2024. 9. 29. 01:33

SwiftUI 하위뷰에서 상위뷰로 DelegatePattern을 활용해 이벤트 전달하기

 

 

글의 순서

  • 상황
  • 어떻게 처리할까?
  • 코드 적용 예시
  • 마무리

 

상황

홈 화면에서 프로필 리스트가 있는 네비게이션 방식으로 화면을 전환하고, 해당 화면에서 프로필을 전환하고 pop 혹은 dismiss로 홈 화면으로 돌아왔을 때, 프로필이 전환되어야 함.

 

즉, 하위 뷰가 상위 뷰로 프로필이 전환되었음(이벤트)을 알려야 함.

 

어떻게 처리할까?

우선 UIKit에서라면 여러가지 방법이 있겠지만, 단순하게는 Delegate Pattern이 있음.

SwiftUI에서는 Environment, preferenceKey를 활용할 수 있고, @State, @Binding을 활용해 하위 뷰와 연결할 수도 있음.

 

SwiftUI에서 제안된 방법들은 사용했을 때 약간의 불편함이 있음.

해당 UI를 UIKit에서 사용해야 할 경우 이벤트 전달 부분을 UIKit에 전달하기 위해 복잡한 래핑 과정을 거치거나, 해당 과정이 복잡할 경우 UIKit을 위한 이벤트용 Interface를 추가해주는 과정이 존재하기도 함.

 

 

코드 적용 예시

 

1. 이벤트를 전달하기 위한 프로토콜 정의

 

Delegate 선언

 

 

2. 이벤트를 받는 쪽에 해당 프로토콜을 구현

Delegate 구현

 

 

3. 멀티프로필 리스트에서 해당 타입의 delegate 선언 및 이벤트 트리거

 

변수 선언

 

이벤트 트리거


4. 홈 뷰(상위 뷰)에서 멀티 프로필(하위 뷰)를 선언하는 영역에 delegate 연결

연결

 

 

마무리

최근 작업들은 대부분 SwiftUI로 작업하고 있음. 하지만 사내 코드 및 서비스 안정성을 고려하면 UIKit을 선택하는 경우가 많아서 두 영역에서 불편함 없이 공통으로 사용할 수 있도록 설계할 때 고민을 많이 함.