단순 번역으로 대리자 라고 번역이 되는데 그 뜻 처럼
하나의 객체가 다른 객체를 대신하여 동작이나 조정하는 역활을 가지는 디자인 패턴입니다.
class Name : UIViewController, UITextViewDelegate{ // delegate를 프로토콜 해놓고
@IBOutlet weak var whotext: UITextView!
override func viewWillAppear(_ animated: Bool) {
whotext.delegate = self // delegate등록
}
func textViewDidChange(_ textView: UITextView) {
// textView 변화 감지
// 작동시 이루어질 소스코드 작성하기
}
}
위 처럼 동작을 감지하는 식의 함수들이 정의되어 있는 것을 찾아서 상황에 맞게 작성하고 뷰를 로드할때 delegate등록을 해놓으면 그 아이템에 동작이 이루어질때 자동으로 감지하여 적절한 함수를 찾아 실행 되게 됩니다.
그림으로 작동하는 방식은 이런 식으로 되게 됩니다(예시는 textField)
데이타소스는 delegate와 비슷하지만 delegate는 인터페이스 제어 관련한 수행을하지만
datasource는 데이터를 제어하는 수행을 합니다.
대표적인 데이터소스 관련한 함수는
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell // return a cell ie UITableViewCell
// 테이블뷰의 셀에 대한 작업을 할때 씀
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int // return a number ie an Int
// 테이블뷰의 셀의 개수를 파악
프로콜은 미리 정의되어 있는 것을 활용하기 위해 class선언때 옆에 : 이후로 붙이는데
class 선언후 : 첫번째(이것은 상속을), 두번째이후(프로토콜)
프로토콜은 미리 정의되어있지만 내부를 채워서 활용해야하기때문에
위에 UITextViewDelegate 가 프로토콜이며
func textViewDidChange(_ textView: UITextView)이것이 프로토콜로 미리 정의 되어있지만 활용하려면 내부내용을 작성해야(세부기능을 정의해야) 최종적으로 쓸 수 있는 것입니다.