テックキャンプ129日目〜自作デリゲート

kobasaです(´ω`*)
今更ですがUdemyなど動画を見ながらキーボードを叩くときに
イヤホンケーブルが邪魔になりますね。

なのでマイク付きのワイヤレスイヤホンを買おうと思います。
イヤホン部分だけのやつはマイク位置が気になる。周りの音拾わんのかな?
左右一体型は重くて肩凝ったりするんですかね?

129日目の勉強内容

デリゲートとは

デリゲートとは「委譲する・委任する」と言う意味。
プロトコルを使用してデリゲート作成することを「プロトコルを宣言する」と言う。

プロトコルで定義されたメソッドを「デリゲートメソッド」と呼ぶ
デリゲートを使用する目的は、あるクラスから他のクラスに処理を委譲すること。
・ネクストビューコントローラークラスで定義したデリゲートメソッドを、
 ビューコントローラークラスで使用できるようにする。

メソッドを作成したいがクラスを作成するほどでもないときに使う?
(今回は変数を渡すメソッドを作成した。)

デリゲートメソッドの作成・使用方法

遷移先でデリゲートメソッドの作成と発動タイミングを指定する。①②
遷移前でデリゲートメソッドが呼び出されたときの処理と委任を受ける記述をする。③④⑤

①遷移先:Protocol(仕様書)を宣言して変数化する。

protocol CatchProtocol {
    func catchData(count:Int)
}
	
var delegate:CatchProtocol?

②遷移先:遷移前クラスでの発動タイミングを記述する。
(backボタンを押したときにcountの中身を渡すデリゲートメソッドが発動)

@IBAction func back(_ sender: Any) {
    delegate?.catchData(count: count)
    dismiss(animated: true, completion: nil)
}

③遷移前:遷移先クラスで作成したProtocolを使用する宣言。

class ViewController: UIViewController,CatchProtocol {

④遷移前:呼び出されたときの処理を記述。②で呼び出されると処置が実行される。
(遷移先から渡されたcountの値をラベルに表示させる処理)

func catchData(count: Int) {
    label.text = String(count)
}

⑤遷移前:遷移先クラスから自分のクラスへプロトコルの委任を受ける。
(委任の記述がないと遷移前でデリゲートメソッドを使用できない)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let nextVC = segue.destination as! nextViewController
    nextVC.delegate = self
}

コメント

タイトルとURLをコピーしました