LoginSignup
2
2

More than 3 years have passed since last update.

【Swift】ぼんやりとDelegateの流れをつかむ

Posted at

委任とは

考えるとややこしくなってきたがぼんやりと流れをつかむ。

委任側

「メソッドを使わせてくれ」とお願いする側。

NextViewController.swift
// 1. 規則を決める
protocol CatchProtocol {
  func catchData(count:Int)
}

class NextViewController: UIViewController {

  var count:Int = 0

  // 2. 1を deledele という名前の変数にする
  var deledele:CatchProtocol?

  @IBAction func push(_ sender: Any) {

    // 3. 発動する。引数が必要であれば渡す
    deledele?.catchData(count:count)
  }

受託側

「メソッドを使わせてくれ」とお願いされる側。

ViewController.swift
// 1. 宣言する
class ViewController: UIViewController, CatchProtocol {

  @IBOutlet weak var label: UILabel!

  var count:Int = 0

  override func viewDidLoad() {
    super.viewDidLoad()
  }

  // 2. デリゲートメソッド。宣言したときのエラーで fix 押したら作られる
  func catchData(count: Int) {
    label.text = String(count)
  }

  @IBAction func next(_ sender: Any) {
    performSegue(withIdentifier: "next", sender: nil)
  }

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

    // 「NextViewControllerのdeledeleを任されました」という記述
    nextVC.deledele = self
  }
}
  • ホントは deledele なんてトンチキな名前じゃなくて delegate とかにしたほうがチームメンバーなど他の人が見たときにわかりやすい
  • 流れはなんとなくわかったけど最後の self がぼんやりしてる
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2