본문 바로가기
Developer/iOS, Swift

[iOS] Segue로 화면 간 데이터 전달하기 (Feat. 안드로이드 Intent)

by Doony 2019. 8. 20.

이번 포스팅에서는 안드로이드의 intent와 유사한 기능을 하는 데이터 전달 방법 중 세그웨이를 이용한 방법에 대해 알아보겠습니다. 특히 그중에서도 인텐트의 역할에 초점을 맞춰, 세그웨이를 통한 전달을 비교해보겠습니다.

안드로이드 intent의 경우, 동작 방식은 다음과 같습니다.

Intent intent = new Intent(PreviousActivity, NextActivity);
intent.putExtra("key", "value");
startActivity(intent);

이런 식으로 화면 전환과 데이터 전달에 대한 코드가 아주 간결했는데요. 이미 인텐트를 선언할 때부터 이동할 클래스파일을 지정하기 때문인 것 같습니다. 반면 세그웨이 데이터 전달은 이보다는 다소 복잡하게 느껴질 수 있습니다. 하지만 동작 방식은 유사합니다.

먼저 두 화면이 있고, 두 클래스가 있다고 가정합니다.
첫번째 화면에서는 text Field로 텍스트 작업을 하고, 버튼을 누르면 두번째 화면으로 넘어갑니다.
두번째 화면에서는 label이 있으며, 첫번째 화면에서 입력한 텍스트를 띄웁니다.

즉, 첫번째 화면에서 두번째 화면으로 textField의 text값을 넘겨야합니다.
전체 코드를 먼저 보시면 다음과 같습니다.

  • ViewController.swift (첫번째화면)

  • SecondViewController.swift (두번째 화면)

첫번째 파일에서 보면,

  • prepare 메소드를 오버라이드하여, 세그웨이로 전달할 경로를 설정합니다. (destination)
  • 두번째 스위프트 파일인 SecondViewController에서 가지고 있는 변수에 값을 할당합니다.

두번째 파일에서 보면,

  • 변수의 값을 레이블 텍스트 값으로 설정해줍니다.

prepare을 통해서 두번째 뷰의 변수에 접근하고, 직접 값을 할당하고 있습니다. prepare 메소드를 사용해야한다는 점을 제외하면 인텐트보다 어쩌면 약간 더 간결한 것 같기도 합니다. 이동할 뷰의 변수로 바로 접근이 가능하니까요.

다음 포스팅에서는 프로토콜을 이용한 방식에 대해 알아보겠습니다.

댓글