[다운캐스팅] ViewController 간 데이터 전달방법

Bright Hyeon·2021년 12월 27일
1

iOS

목록 보기
7/9
post-thumbnail

🍎 데이터 전달방법

  • 더욱 많은 방법이 있겠지만 현재 습득한 방법은 4가지 정도입니다.
  • 다운캐스팅을 이용하여 자식뷰컨트롤러의 프로퍼티에 접근하는 방법.
  • delegate(사전적 의미: 위임하다.) 패턴 방법.
  • segue - prepare 오버라이딩 방법.
  • NotificationCenter 활용하여 전달하는 방법.
  • 이번 시간에는 다운캐스팅을 이용한 데이터 전달을 코드 예시를 함께 보여드리며 설명하겠습니다.

🍏 다운캐스팅 이용

  • ViewController에서 자식뷰컨트롤러를 다운캐스팅하여 자식뷰컨트롤러의 프로퍼티에 접근하는 방법이 있습니다.

위 사진 속 Code Push 버튼을 누르면 가운데 ViewController의 데이터가 우측 뷰컨트롤러에 전달되어 저 화면의 텍스트라벨에 표시되도록 코드를 구현해보겠습니다.

먼저 우측 뷰컨트롤러에서 데이터를 받을 준비를 합니다. 이 때 전달될 데이터가 없어도 오류가 없도록 name값은 옵셔널로 취해줍니다. name은 전달받은 값을 저장하고 textLabel에 값을 넘겨주는 역할을 수행할 변수입니다.

데이터를 주는 쪽인 가운데 뷰컨트롤러에서의 다운캐스팅입니다. 이렇게 다운캐스팅을 하게되면, ViewController에서 CodePushViewController의 프로퍼티 값에 접근할 수 있게 됩니다.

guard let구문 대신 if let구문으로도 사용이 가능합니다. 이 때는 if문 안에서만 선언한 상수 viewController를 사용할 수 있으니 꼭 { } 안에서 처리해주어야 합니다.

  • 이렇게 코드를 구현하면 시뮬레이터를 돌렸을 때, 우측 Label 뷰에 보낸 데이터인 "전달할 값이오."가 표시되게 됩니다.
@IBOutlet weak var textLabel: UILabel!
var name: String?
  • 여기서 name이 아닌 textLabel.text에 바로 값을 전달하려고 접근하면,
    Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value 이런 에러가 발생합니다.
  • 뭐가 nil인가 하니 textLabel이 nil이였습니다. 아직 우측 CodePushViewController가 초기화되기 전이기에 textLabel이 아직 nil인 것입니다. nil에는 String을 할당할 수 없기 때문에 이런 오류가 발생하게 됩니다.
profile
i'm Obsessed with Swift. iOS

0개의 댓글