swift3 デリゲートメソッドの実装について

デリゲートメソッドをどのように実際に利用するか説明

呼び出し元    

 

//会話履歴テーブル,デリゲートで呼ぶ

var delegate: ConversationDelegate?

delegate?.ConversationSelected(Conversation: datMeeting!)

//datMeetingは実引数

 

 

// 会話履歴プロトコル

protocol ConversationDelegate {

    func ConversationSelected( Conversation: DatMeeting)    

}

 

//実装先 呼び出されている方

   func ConversationSelected(Conversation: DatMeeting) {

        //ここでdatperson id

        perName.text = datPerson.name

        //少配布物を作成

        distSmall.text = person.distSmall

        convCont.text = Conversation.content

    }

 

主に画面の左右に別れているときに利用した。

画面が変わると全部メモリでは落ちている。

そこで次の画面につなげる仕組みの一つがデリゲート。

 

他の例 これはデリゲートメソッドではないけど

Msperson画面が2つに割れているもの、詳細 MAP

  private weak var msPersonData: MsPersonDataPad!

 

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        super.prepare(for: segue, sender: sender)

        if segue.destination is MsPersonDataPad {

            // Embeded segue 受信のタイミングで MsPersonData インスタンスを取得し

            // 編集モードとデータを設定しておく

            msPersonData = segue.destination as! MsPersonDataPad

            msPersonData.setupDatPerson(.New, datPerson: datPerson)

        }

    }

 

    /// 編集モードでのdatParson(訪問先データ)の運用を開始する

    ///

    /// .Empty又は.Newの場合、datPerson は nil(default)、datPerson != nil の場合は

    /// 指定 mode によらず.Existing になる。

    /// - Parameters:

    ///   - mode: 編集モード

    ///   - datPerson: 訪問先データ

    func setupDatPerson(_ mode: EditMode, datPerson: DatPerson? = nil) {

        self.editMode =

            datPerson != nil ? .Existing : mode == .New ? .New : .Empty

        datPersonImpl =

            self.editMode != .New ? datPerson : DatPerson.newFormalOne()

        // viewがすでに動作している(viewWillAppear <= state < dismiss)

        if canDisplyData {

            setDataOnUIs()

        }

    }

 

   /// 編集モードを表す

    ///

    /// - Empty: 該当無し(検索と訪問先の画面で検索結果が空,...等)

    /// - New: 新規登録

    /// - Existing: 既存訪問先(詳細表示と編集)

    enum EditMode: Int {

        case Empty

        case New

        case Existing

    }