화면간 데이터 전달을 하려 할 때엔 화면전환이 가능해진 이후.
화면전환에서 사용했던 옵셔널 바인딩을 약간 수정해야한다.
guard let viewController = self.storyboard?.instantiateViewController(withIdentifier: "Storyboard ID") as else { return }
옵셔널 바인딩을 해준 이유는 뷰를 클래스의 인스턴스화 해야하기 때문이다.
데이터 전달을 할 때에도 인스턴스화가 필요하지만 다른 방식의 접근이 필요하다.
옵셔널 바인딩과 다운캐스팅을 사용한다.
guard let viewController = self.storyboard?.instantiateViewController(withIdentifier: "CodePushViewController")
as? CodePushViewController else { return }
as? 와 CodePushViewController이다.
참고로 CodePushViewController는 다른 뷰의 클래스 이름이다.
다운캐스팅을 하면 해당 클래스(스택의 상위에 오게될 클래스)의 프로퍼티에 직접접근이 가능해진다.
viewController.name = "clamp"
CodePushVIewController 클래스엔 name이란 프로퍼티를 먼저 지정해놓았다.
쉽고 간단하게 말하자면 바인딩상수인 viewController엔 CodePushVIewController가 저장되어있고 다운캐스팅을통해 직접 변수에 접근을 한 것이다.
이후 CodePushVIewController클래스뷰가 실행되면
//CoudPushVIewController cocoa touch파일 내부
override func viewDidLoad() {
super.viewDidLoad()
if let name = name{
self.nameLabel.text = name
self.nameLabel.sizeToFit()
}
viewDidLoad()는 메모리에 뷰가 스택에 로드될때 불리는 메소드이다.
즉 해당 뷰가 화면에 나오기 전 해당 뷰의 지정된 라벨엔 name 변수의 String이 적혀있다.