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
}