[iOS]<MemoApp> 데이터 전달(by Segueway)

RudinP·2023년 11월 16일
0

Study

목록 보기
116/227

데이터 전달

목록화면에서 선택한 메모를 보기화면으로 전달
여기에서는 가장 기본적인 패턴으로 구현

세그웨이는 화면을 만들고 화면전환이 시작되기 전에 특별한 메소드를 호출

DetailViewController에 Memo 변수 추가

  • 이전 화면에서 건네받은 메모를 해당 변수에 저장
  • nil일 경우도 있을 수 있기 때문에 옵셔널

MemoListTableViewController에 prepare 함수 추가

  • prepare 함수는 전달된 화면을 생성하고 화면을 호출하기 직전에 실행됨

  • 여기서 좌측의 프로토타입 셀이 세그웨이를 생성하는 sender가 된다.
  • 위의 prepare 함수의 두번째 파라미터로 전달된다.
  • sender를 활용해서 몇번째 셀인지 계산해야 한다.
  • Any? 타입을 실제 자료형인 UITableViewCell 로 바꾸고 셀을 테이블뷰로 전달해서 몇번째 위치한 셀인지 확인한다.

source


segue 에서 목록화면과 보기화면에 접근할 수 있다.
세그웨이를 실행하는 화면을 source 라고 한다.

destination


새롭게 표시되는 화면을 destination 이라고 한다.
여기서, 메모를 전달하기 위해서는 UIViewController -> DetailViewController로의 타입캐스팅이 필요하다.


타입 캐스팅 (is, as)

  1. 인스턴스의 타입 확인
  2. 해당 인스턴스를 자신의 하위, 상위 클래스로 처리하는 방법
  3. 해당 타입이 프로토콜을 따르는지 확인 가능
A is Type : return true or false //런타임에 A가 특정 type으로 캐스팅 되는지 체크

A as Type // 컴파일에 캐스팅. 언제나 특정 type으로 캐스팅 성공할 때만 사용 가능. 
//업캐스팅(Upcasting), 혹은 브릿징(Bridging)에 사용

A as? Type : return type의 옵셔널 or nil // 런타임에 캐스팅.

A as! Type // 런타임에 type으로 강제 캐스팅. 실패할 경우 런타임 에러

Any

Any 타입

  • 옵셔널 타입을 포함한 모든 타입을 나타낼 수 있음
  • 값 타입이 Any 타입으로 기대되는 곳에서 만약 옵셔널 값을 사용한다면 warning 발생
  • 이 때는 as 연산자를 사용하여 옵셔널 타입을 Any 로 명시적 캐스팅하여 사용하면 warning 은 사라지게 됨

출처


DetailViewController로의 타입캐스팅

  • vc는 세그웨이의 도착점, 즉 보기화면을 가져온 변수이다.
  • 이제 DetailViewContoller에서 정의해둔memo에 접근할 수 있게 된다.

vc.memo에 선택된 indexPath.row의 정보 저장

목록화면에서 전달된 메모를 보기화면에 표시

  • 여기서 dateCell은 문자열 타입으로 바꾸며 dateFormatter을 사용해야 한다.


  • string(from:) 메소드는 옵셔널 값을 파라미터로 받지 않는다.
  • 따라서 string(for:) 메소드를 사용한다.

simulator 결과 화면

DetailView에서 MemoListView에서 전달받은 정보가 표시되는 것을 확인 가능

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글