Delegate 속성
- 위임자, 대리자
- 대신 처리 해줄 객체와 처리하라고 시키는 객체로 구분
- 어떤 객체가 해야 하는 일을 부분적으로 확장해서 대신 처리
- Protocol로 정의하여 사용
- 엄격한 Syntax로 필요한 메소드들이 명확하게 명시
- 제3의 객체 (예: Notification Center 객체)가 필요없음
- nil 주의
- 많은 줄의 코드가 추가
- 많은 객체들에게 이벤트 알리는 것이 비효율적
protocol TestDelegate {
func textChange(text: String)
}
textChange라는 함수가 실행되면 이 Delegate를 채택한 ViewController의 라벨을 바꿀거에요

위처럼 첫번째 화면을 구현 했어요
앞서 만든 TestDelegate를 채택하고 해당함수가 실행되면
다른 ViewController에서 전달받은 text로 Label을 바꿀수 잇도록 했습니다.

다음화면에 TestDelegate 프로토콜 자료형인 delegate 변수를 선언해 두고
다음화면으로 넘어오기 전에
nextVC.delegate = self 를 통해서 변수에 값을 채워 줍니다!!!
전화면이 A, 다음화면이 B 라고 했을때
A와 B는 서로 ViewController 객체에요
A는 TestDelegate를 채택하고 있으니까 B의 delegate 자료형과 맞기때문에
delegate에 A 객체가 들어갈 수 있어요!!
그렇다면 delegate는 A객체를 참조하고있으니까
delegate.textChange를 호출한다면
A객체에 있는 textChange를 호출 하는 거에요!!!
정리하자면
B에서
delegate.textChange(text: “두번째 화면에서 보낸 텍스트”) 를 입력하면
여기서 text가 A의 매개변수로 들어오고 textChange 함수가 실행되요
이러한 방법으로 이벤트를 처리하는 방식이 Delegate 패턴입니다!!!
-
이 게시글은
남수에 의해 4 years, 11 months 전에 수정됐습니다.