[Swift]プロトコル/Delegateについて



契約とは?

  • プロトコル=約定
  • 相互間の承諾
  • アルバイトのレシピだと思ってください.

    UItableViewDataSourceプロトコルでは、CellForRowAt、NumberOfSections...定義などの関数が表示されます.
  • しかし、なぜプロトコルには定義しかなく、直接実施されていないのか.
    →すべての可能性を考えにくいから!今から理解してみましょう.
    例えば、先生のプロトコルがあれば、その中の関数は何がありますか.
    protocol Teacher{
    	var subject : String { get set }//과목
    	var homeroom : String { get set }//담당반
    	func teach() //가르치다
    	func giveHomework() //숙제를 내주다
    }
    プロトコルは、名前、タイプ、getable、setableを示します(プロトコルは常にvarとして宣言する必要があります).
    地球の上で国語の先生の数学の先生の英語の先生があるべきです...先生たちが出るたびに協議を再開しますか?
    →そうしないためにプロトコル/ゲートウェイモードを使う…
    すべての可能性を考えるのは難しいので、実現はTeacherプロトコルを採用した場所で行われています!
    struct Kim : Teacher{
    	var homeworkPgs : Int = 10
    
    	var subject : String = "수학"
    	var homeroom : String = "3반"
    
    	func teach(){
    		print("와 진짜 명강의")
    	}
    	func giveHomework(){
    		homeworkPgs += 10
    	}
    }
    
    print(Kim.subject)
    print(Kim.homeroom)
    print(Kim.teach())
    
    Kim.giveHomework()
    
    //결과값 한번 맞춰봐...

    プロトコルを採用すると、このような赤いエラーが発生することがあります!
    「FirstViewControllerがデータ配信プロトコルを遵守していない」
    これは、プロトコル内のすべてのコンテンツが実装されていないために発生したエラーです.
    ここで注意しなければならないのは,プロトコルで宣言されているように実現しなければならないことである.
    ここでは、パラメータ名が変更されたり、タイプが変更されたりすると、他のメソッドとして認識されるため、プロトコルの宣言に従って記録する必要があります.

    2. Protocol Requirements

  • プロトコル内のプロトコルを要求する場合、varを使用して作成する必要があります.
  • get(読み取り専用)/set(読み取り専用)が実行可能かどうかを指定する必要があります(そうでなければエラー!)
  • Delegateとは?

  • Delegate==エージェント
  • プロトコル→アルバイト生が学ぶメニューDelegate→そのメニューを学ぶアルバイト生!
  • 3. Delegate Pattern

  • アップルでは、コントローラにロールを委任する際に
  • を頻繁に使用するように依頼しています.
  • 現在は主にMVCモードを使用しているので、viewの役割は、これらの動作をどのように処理するかがコントローラに委任されていることをユーザーに伝えるだけです.
  • 4.委任使用順序の例

  • データをコミットするビュー
  • プロトコル
  • を生成する.
    委任プロトコルタイプ
  • の作成
  • 委託プロトコル
  • を使用
  • 受信データのビュー
  • プロトコルは
  • を採用する
  • プロトコルにおける関数
  • を直接実装する.
  • 依頼