[swift] 모달과 네비게이션 뷰 사이에서 데이터를 전달하는 방법은?
모달 뷰에서 데이터를 전달하는 방법
모달로 표시된 뷰 컨트롤러에서 데이터를 전달하려면, delegate 패턴이나 closure를 사용할 수 있습니다.
-
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) } }
-
Closure: 모달로 표시되는 뷰 컨트롤러에서 클로저를 사용하여 데이터를 반환합니다.
class ModalViewController: UIViewController { var onDataSelected: ((Any) -> Void)? func didSelectData(data: Any) { onDataSelected?(data) dismiss(animated: true, completion: nil) } }
네비게이션 뷰에서 데이터를 전달하는 방법
네비게이션 스택에 푸시된 뷰 컨트롤러에서 데이터를 전달하는 방법은, 두 뷰 컨트롤러 사이에 직접 속성을 전달하거나 closure를 활용하는 방법이 있습니다.
-
속성 전달: 데이터를 받을 뷰 컨트롤러에 속성을 정의하고 값을 대입합니다.
class DestinationViewController: UIViewController { var receivedData: Any? // 다른 뷰 컨트롤러로부터 데이터를 받음 }
-
Closure: 데이터를 전달하고 받을 클로저를 정의하여 값을 반환합니다.
class DestinationViewController: UIViewController { var onDataReceive: ((Any) -> Void)? // 클로저를 통해 데이터를 전달하고 받음 }
이러한 방법들을 통해, 모달과 네비게이션 뷰 사이에서 데이터를 효과적으로 전달할 수 있습니다.