기어가더라도 제대로

Delegate 본문

Swift - 기초

Delegate

Damagucci-juice 2022. 3. 11. 11:50

정의

직역하면 대리인, 클래스 간에 응집도? 결합도? 강한 참조? 여튼 암튼 그런 것을 피하기 위해서 사용하는 패턴
주로 MVC 패턴에서 많이 사용한다네요.

예시

imageScreen Shot 2022-03-09 at 12 42 21 AM

각각의 구성요소들이 각자 자기가 할 일을 처리하고 자신이 처리했다는 사실을 알린다. 연결선은 직접 연결을 뜻하기도하고, 델리게이트일 수도 있고, 옵저버 패턴일 수도 있다. 상황에 따라 적절한 방법을 선택해야한다.

구현

스토리 보드 구현 화면

버튼을 만들어서 함수에 연결

buttonConnection

코드 흐름

 

 

순서

  1. view 에서 버튼이 눌림
  2. 모델아 사각형을 만들어!
  3. 만들었어!
  4. 뷰야! 모델이 사각형 만들었데, 뷰 만들어!

 

버튼을 만드는 방법은 검색을 통해 알아주세요ㅠㅠ 델리게이트에 집중해보겠습니다.
버튼이 눌리면 모델이 사각형을 만듭니다. addRectagle() 메서드 안에서 델리게이트에 만든 사각형을 담습니다.

담긴 사각형을 델리게이트가 전달합니다!
여기서 잠깐, 델리게이트 속성의 타입이 독특하네요! 프로토콜 자체가 타입니다.

델리게이트 프로토콜을 델리게이트 속성에 담고, 어딘가에서 이 델리게이트의 주인이 "나야 !" 하는 그곳에 담긴 사각형이 도착합니다.

모델에서 옵셔널 프로퍼티로 선언한 것은 그 때문입니다.
3. 만들었어! 는 결국 model.delegaet = self 를 선언한 뷰컨트롤러에 도착합니다.

뷰 컨트롤러에서는 이 때를 대비에서 addRectangleDelegate 프로토콜을 채택하고 관련 메서드를 만들어주는 extension을 만들어주었네요~ 이제 뷰에게 일을 시킵니다. 사각형을 바탕으로 UIView 를 만들으라고 말이죠~

참 쉽죠?  (

네 죄송합니다 어려웡요)

 

 

완성 화면

Simulator Screen Shot - iPhone 13 - 2022-03-11 at 11 46 52

'Swift - 기초' 카테고리의 다른 글

객체간 데이터 전달하는 방법 4가지  (0) 2022.05.08
Notification Center 간단 사용법  (2) 2022.03.15
Hashable  (0) 2022.03.11
parameta와 argument  (0) 2021.11.10
type & instance  (0) 2021.11.07
Comments