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

앱을 개발하다 보면 모달 뷰나 네비게이션 뷰에서 다른 뷰로 데이터를 전달해야 하는 경우가 많습니다. 이때 데이터 전달을 안전하고 효율적으로 하기 위해서는 몇 가지 방법들을 고려해볼 수 있습니다.

모달 뷰에서 데이터 전달

모달로 표시된 뷰 컨트롤러에서 데이터를 다른 뷰 컨트롤러로 전달하기 위해서는 델리게이트 (delegate) 패턴을 사용할 수 있습니다.

예를 들어, 모달로 표시된 뷰 컨트롤러는 델리게이트 프로퍼티를 가지고 있어야 하며, 데이터를 전달할 때 이 델리게이트를 활용하여 데이터를 전달합니다. 또는 closure를 사용하여 모달 뷰가 닫힐 때 특정 동작을 수행하도록 할 수도 있습니다.

protocol ModalDelegate: AnyObject {
    func didCloseWithData(data: Any)
}

class ModalViewController: UIViewController {
    weak var delegate: ModalDelegate?

    // 모달이 닫힐 때 데이터 전달
    func closeAndSendData() {
        delegate?.didCloseWithData(data: newData)
        dismiss(animated: true, completion: nil)
    }
}

네비게이션 뷰에서 데이터 전달

네비게이션 스택에서 데이터를 전달하는 가장 흔한 방법은 prepare(for segue:sender:) 메서드를 사용하는 것입니다.

이 메서드를 사용하여 목적지 뷰 컨트롤러에 데이터를 전달할 수 있으며, 목적지 뷰 컨트롤러는 이 데이터를 받아 적절히 처리할 수 있습니다.

class SourceViewController: UIViewController {
    // 데이터를 전달할 때 사용될 데이터
    let dataToPass = "Hello, Destination View!"

    // 네비게이션 segue 실행 시 데이터 전달
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destinationVC = segue.destination as? DestinationViewController {
            destinationVC.receivedData = dataToPass
        }
    }
}

참고 자료

  1. The Swift Programming Language - Delegation
  2. Apple Developer Documentation - UIViewController

앱의 구조와 요구에 맞게 위의 방법들을 조합하여 데이터를 안전하게 전달할 수 있습니다.