Delegate는 위임하다, 대리자라는 뜻을 가지고 있다.
객체 지향 프로그래밍에서 델리게이트 패턴은 하나의 객체가 모든 일을 처리하는 것이 아니라
처리해야 할 일 중 일부를 다른 객체에게 위임 한다는 것이다.
객체지향 4대특성
- 캡슐화
- 상속성
- 추상화
- 다형성
Swift에 구현된 Delegate 프로토콜
(UITextFieldDelegate, UITableViewDelegate, UIWebViewDelegate 등등)
사용할 ViewController에 UITextFieldDelegate를 채택을 한 후
현재 ViewController를 대리자로 설정한다.
textField.delegate = self
self는 현재 ViewController의 객체를 말한다
textField의 대리자(Delegate)는 ViewController의 객체가 된다는 말이다.
class ViewController: UIViewController, UITextFieldDelegate {
let textField = UITextField()
override func viewDidLoad() {
super.viewDidLoad()
self.textField.delegate = self
}
}
Swift에서 기본 구현되어 있는 Delegate프로토콜들은 많은 메서드가 존재한다
UITextFieldDelegate 공식문서
애플에서 잘 만들어 놓은 메서드들을 우리는 목적에 맞게 선택하여 선택하면 된다.
메서드를 재정의 해준다
// 지정된 텍스트 필드에 대한 편집이 중지된 시점과 중지된 이유를 델리게이트에게 알려줍니다.
func textFieldDidEndEditing(_ textField: UITextField) {
textField.text = "END"
}
// 델리게이트에게 텍스트 필드의 리턴 버튼 누름을 처리할지 여부를 묻습니다.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
}
실제 UITextField의 동작이지만 ViewController가 메서드를 전달받아 대신 작업한다.
화면에서 유저와 UITextField가 소통을 하면
UITextField의 동작은 Delegate를 통해서 ViewController에 전달받아 수행한다.
쌍방향 의사소통의 개념