Swift Delegate

0 답변 글타래를 보이고 있습니다
  • 글쓴이
    • 남수
      참가자
      • 글작성 : 13
      • 답글작성 : 2

      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, 7 months 전에 수정됐습니다.
0 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom