상세 컨텐츠

본문 제목

[Swift] Delegate로 정보 전달하기

SWIFT

by 옹홍 2021. 2. 5. 21:10

본문

Doit Swift로 공부를 하던 도중 의문점이 생기는 Delegate에 대해서 정리한 글이다. 

이런 패턴으로 viewcontroller와  EditViewController 사이의 데이터를 주고 받는 형식이었다. 블로그에 찾아보니 이게 Delegate 패턴이라고 한다. zeddios.tistory.com/310를 참고해서 쓴글이다. zeddios.tistory.com/8?category=682195도 참고했다.

Delegate를 알기 위해서는 프로토콜을 알아야한다. 

프로토콜은 서로간의 지켜야할 규약이라는 뜻이다. 이 안에서는 정의만 해놓고 구현은 하지 않는다. C++의 추상 클래스과 조금 비슷하다는 생각이 들었다. DO IT의 예제에서의 프로토콜은 여기있다.

EditDelegate라는 프로토콜은  didMessageEditDone 과 didImageOnOffDone이라는 2가지 메소드가 존재하고, 이 프로토콜을 상속받는다면 이 2 메소드의 구현은 꼭 해댱한다.

그래서 구현이 되어있다.

하지만 그전에 EditViewController에서 프로토콜 타입의 변수 선언을 해줘야한다. 

이 변수를 EditViewController에 선언해준 이유는, EditDelegate의 변수 선언으로 didMessageEditDone 과 didImageOnOffDone이라는 2가지 메소드에 접근하기 위해서다. 이 2개에 접근해야지 데이터를 보낼 수 있으니까! 이렇게 말이다.

데이터를 받는 ViewController 입장은 어떠할까? Delegate를 이용해서 우리는 데이터를 EditViewController에서 ViewController로 보낼 것이다. Delegate를 사용할때, 프로토콜을 1. 채택하고 2. 준수하고 3. 대리인을 위임하고, 4. 프로토콜의 메소드를 구현하면 delegate가 알알아서 해준다

1. 채택

3. 준수

여기서 알아야하는 것!!! 프로토콜 안의 메소드가 optional이 아니라면 필수 구현, optional이라면 선택구현이다. 

3. 대리자 위임

보통은 viewDidLoad안에 delegate 위임을 해주기 마련이다. 뷰가 실행하기 직전에 delegate를 위임해주면서 delegate가 일을 대신해주길 바라는 것이니깐, 하지만 segue끼리일때는? 다른 segue로 이동하기 전에 delegate를 위임하면서 정보전달을 하게 만드는 것이다. 

ViewController가 editViewController의 위임자가 되는 것이다. 여기서 

 editViewController.textMessage = txMessage.text!

editViewController.isOn = isOn

이 둘은 viewcontroller를 editViewcontroller로 정보를 보내는 것이다.

editViewController.delegate = self 는 editViewController의 정보를 받는 것 editViewController의 특정 일을 받아서 대신해준다. editViewControlller에서 viewcontroller의 IBOutlet 변수에 접근하는 방법을 대신받아서 해주는것

4. 구현

'SWIFT' 카테고리의 다른 글

[Swift] View의 생애주기2  (0) 2021.02.08
[Swift] View Controller의 생명주기  (0) 2021.02.08
[Swift] 함수  (0) 2021.01.31
[Swift] 컬렉션 타입 - Array, Dictionary, Set  (0) 2021.01.31
[Swift] iOS 아키텍처 MVC와 MVVM  (0) 2021.01.29

관련글 더보기

댓글 영역