Delegateモードの理解


Delegateモード
DelegateはSWIFTの設計モデルの一つであり,ほとんどがプロトコルによって実現されている.
Delegateモードは、簡単に言えば、自分の関数を呼び出すことができる権限(関数呼び出しだけでなく、オブジェクト自体の権限)を他のオブジェクトに委任します.主に、ビューコントローラは他のオブジェクトをDelegateオブジェクトとして使用し、他のオブジェクトでDelegateプロトコルを定義し、そのオブジェクト上の任意の時点でビューコントローラの関数を呼び出します.
Delegateオブジェクトは、オブジェクトの内部状況をよりよく理解しているため、開発者の意図に応じて、関数が呼び出されるタイミングでオブジェクトの代わりに関数を呼び出すことになります.

UItextFieldDelegateの働き方を例に挙げます.
protocol UITextFieldDelegate {
	func textFieldDidBeginEditing()
}

class myViewController: UITextFieldDelegate {
    // 1. UITextField 인 변수 선언
    let textField = UITextField()
    // 2. UITextField의 delegate를 이 ViewController로 설정
    textField.delegate = self
    
    // 4. 구현된 textFieldDidBeginEditing()이 실행됨
    func textFieldDidBeginEditing {
    	// do something
    }
}

//(애플 소유의 코드임으로 내부 구현방식 확인할 순 없음)
class UITextField: UIControl {
    var delegate: UITextFieldDelegate
    // 3. UITextField가 text가 써지고있음을 인식하여 delegate의 textFieldDidBeginEditing 호출
    delegate.textFieldDidBeginEditing()
}            
まず、MyViewControllerはDelegateプロトコルを実装してDelegate宣言の関数を実行する必要があります.
1.UIKET内部のUItextField()変数を宣言し、そのオブジェクトのdelegateプロパティを使用します.
2.UItextFieldオブジェクト内部でDelegateプロトコルを使用するオブジェクトをmyViewControlに設定します.
3.依頼するオブジェクトの関数、すなわちmyViewControlで実現される関数を適切なタイミングで呼び出す.(実行を通知するだけ)
4.結果はmyViewControlがUItextFieldオブジェクトの実行を要求する関数です.
myViewControllerはテキストフィールドの入力が開始するかどうかはわかりませんが、UItextFieldオブジェクトの内部に表示されるので、開始時にmyViewControllerのテキストFieldDidBeginEditing関数を呼び出す権限を使用できます!