작성
·
235
0
안녕하세요 앨런님 델리게이트 패턴 관련해서
궁금한게 있어서 질문 드려봅니다.
1.텍스트필드 delegate에 ViewController 인스턴스 등록
2.View 인스턴스는 UITextFieldDelegate 프로토콜 채택
3.텍스트필드에서 실제 이벤트 발생시 등록된 delegate의 메서드를 호출
(아마 호출된 메서드의 반환값을 이용하여 허용 또는 금지를 시킬것같은데 잘은 모르겠습니다.)
4.ViewController 클래스에서는 필요한 논리를 작성하거나 Bool 형식으로 값을 리턴하여 텍스트필드를 제어
UITextFieldDelegate 프로토콜을 채택하고 사용하면 되기에
해당 메서드의 구현부는 공개할 필요가 없음.
제가 이해한것이 맞는지 판단이 안서서
질문 남겨봅니다.
답변 1
0
네네 석기 님 정확하게 이해 하셨어요.
결국 서로 다른 객체 간에 일어나는 동작을 전달하려는 것이 핵심입니다.
(유저 글자 입력) (실제 코드 구현부)
TextField 객체 --------------------------------> 뷰컨트롤러 객체
2개의 객체가 존재하고, 텍스트필드에서 일어난 일을 뷰컨트롤러에 전달하기 위한 것인데,
var delegate: MyViewController? ---------------> self
(textfield.delegate = self ) 라고 하면 좋지만, MyViewController타입은 개발자가 사후에 정의하게 되기 때문에 해당 타입을 알 수가 없어서, 대신에 프로토콜을 사용해서
var delegate: UITextFieldDelegate? -------------> self
이렇게 해주는 것 뿐입니다. 프로토콜 자체는 자격증의 개념처럼 어떤 타입에서도 채택(따는 것)이 가능하고, 반대로 텍스트필드 입장에서보면.. 특정 타입인 MyViewController가 아닌 프로토콜(자격증)을 채택한 모든 타입에 대해 명령(동작)을 시킬 수 있기 때문에 확장성이 생기는 것이지요.
그리고
===============================================
3. 텍스트필드에서 실제 이벤트 발생시 등록된 delegate의 메서드를 호출
(아마 호출된 메서드의 반환값을 이용하여 허용 또는 금지를 시킬것같은데 잘은 모르겠습니다.)
===============================================
이 부분도 정확하게 이해하셨습니다. 반환값 true / false 등의 값이 텍스트필드에 다시 전달이 됩니다.
왜냐면, 텍스트필드 내부에 예를 들어 아래와 같이 실제 델리게이트 메서드를 실행하고 반환값 여부 (true /false) 에 따라서 어떤 일을 하게 할지 말지 와 같은 코드가 구현되어 있을 꺼예요. (물론 가려져 있지만)
(true/false 실제 로직은 뷰컨트롤러에.. 프로토콜의 델리게이트 메서드로 구현되고요.)
let trueOrfalse = textField(...) // 델리게이트 메서드 중에 Bool 리턴하는...
if trueOrfalse {
//...
} else {
//...
}
한번쯤은 뜯어보고 이런 구체적인 과정을 생각해보시면 델리게이트의 개념에 대해 머리속에 명확하게 그려지시리라고 봅니다. ^^
감사합니다.
의심의 여지 없이
확실하게 이해가 됬습니다(지금 배운내용까지는)
답변 감사합니다!!!