[swift] 모달과 네비게이션 뷰 사이에서 데이터를 전달하는 방법은?

모달 뷰에서 데이터를 전달하는 방법

모달로 표시된 뷰 컨트롤러에서 데이터를 전달하려면, delegate 패턴이나 closure를 사용할 수 있습니다.

  1. Delegate 패턴: 모달로 표시되는 뷰 컨트롤러에서 프로토콜을 정의하고, 해당 프로토콜을 채택한 뷰 컨트롤러를 대리자로 지정하여 데이터를 전달합니다.

     protocol ModalViewControllerDelegate: AnyObject {
         func didFinishPickingData(data: Any)
     }
    
     class ModalViewController: UIViewController {
         weak var delegate: ModalViewControllerDelegate?
    
         // 데이터를 선택하고 델리게이트를 통해 전송
         func didSelectData(data: Any) {
             delegate?.didFinishPickingData(data: data)
             dismiss(animated: true, completion: nil)
         }
     }
    
  2. Closure: 모달로 표시되는 뷰 컨트롤러에서 클로저를 사용하여 데이터를 반환합니다.

     class ModalViewController: UIViewController {
         var onDataSelected: ((Any) -> Void)?
    
         func didSelectData(data: Any) {
             onDataSelected?(data)
             dismiss(animated: true, completion: nil)
         }
     }
    

네비게이션 뷰에서 데이터를 전달하는 방법

네비게이션 스택에 푸시된 뷰 컨트롤러에서 데이터를 전달하는 방법은, 두 뷰 컨트롤러 사이에 직접 속성을 전달하거나 closure를 활용하는 방법이 있습니다.

  1. 속성 전달: 데이터를 받을 뷰 컨트롤러에 속성을 정의하고 값을 대입합니다.

     class DestinationViewController: UIViewController {
         var receivedData: Any?
    
         // 다른 뷰 컨트롤러로부터 데이터를 받음
     }
    
  2. Closure: 데이터를 전달하고 받을 클로저를 정의하여 값을 반환합니다.

     class DestinationViewController: UIViewController {
         var onDataReceive: ((Any) -> Void)?
    
         // 클로저를 통해 데이터를 전달하고 받음
     }
    

이러한 방법들을 통해, 모달과 네비게이션 뷰 사이에서 데이터를 효과적으로 전달할 수 있습니다.