【完全攻略】Swiftのdelegate(デリゲート)について徹底解説します!【永久保存版】

Поделиться
HTML-код
  • Опубликовано: 22 авг 2024
  • SwiftによるiPhoneアプリ開発を学んでいく中でつまづきやすいポイントの代表格であるdelegate(デリゲート)について、delegateが解決しようとしている課題・delegateの使い方・delegateの作り方・delegateの具体的な活用方法など、徹底解説していきます!
    ↓動画内で紹介しているサンプルコードは以下から見ることができます。
    github.com/aki...
    あきおのTwitter
    / akio0911
    【アプリ道場サロン】iOSアプリ開発をテーマとしたサロン - CAMPFIRE (キャンプファイヤー)
    community.camp...
    #Xcode #Swift #プログラミング

Комментарии • 17

  • @cxj02040
    @cxj02040 Год назад +1

    delegateの解説動画を何本かみましたが、この動画が自分には一番分かりやすかったです!

    • @akioswift
      @akioswift  Год назад

      コメントありがとうございます!またぜひお気軽にコメント頂けると嬉しいですー!

  • @kai1110-
    @kai1110- Год назад +1

    何回も試聴してコード書いてなんとなく理解できた気がします!
    ほんとに永久保存版ですね。

    • @akioswift
      @akioswift  Год назад

      コメントありがとうございます!理解が進んだということで、とても嬉しいです。
      これからも分かりやすい解説動画を作っていけたらと思います。
      今後ともよろしくお願いします!

  • @eito-qg1fs
    @eito-qg1fs 3 года назад +2

    とてもわかりやすかったです🙌
    途中で髪色変わって最後には元に戻っているのが収束してる感あってよかったです🙌

    • @akioswift
      @akioswift  3 года назад

      複数日にわたって収録したので、途中で髪色が変わってしまいましたw

  • @shinitiomit1095
    @shinitiomit1095 Год назад +1

    なかなか理解出来ず、後回しにしていたデリゲートがようやく腑に落ちました。学ぶ姿勢まで優しく伝えてくださり感謝しております。
    このRUclipsチャンネルで今後ともどんどん知識をつけていきたいと思いますので、これからも宜しくお願いいたします。

    • @akioswift
      @akioswift  Год назад

      コメントありがとうございます!
      お役に立てて良かったです。
      またぜひお気軽にコメント頂けると嬉しいですっ!

  • @YToaster
    @YToaster 3 года назад +2

    ありがとうございます、すごくわかりやすかったです!
    delegateを使うための書き方自体は理解していたつもりでしたが
    具体的に例示していただいたおかげで、何を実現しようとしているのかやっとわかった気がします。
    書き方だけ理解してきたせいか、delegateのために用意する変数などに重き置いてきてしまったのですが
    動画一通り見させてもらって、Protocolこそが根幹であってとんでもなく大事なのもよくわかりました!

    • @akioswift
      @akioswift  3 года назад

      コメントありがとうございます!
      書き方だけでなく「なぜこの仕組みが必要なのか?」「この仕組みがないとどういう事態になるのか?」に注目すると、より理解できるようになると思います!

  • @kamoyan55
    @kamoyan55 2 года назад +1

    「同じメソッドを持つクラスを同等に扱う仕組み」は、以下のように纏めて、理解できました。
    // Delegate Example
    // Protcolの宣言
    protocol CalculatorDelegate {
    func calculate(value1: Int, value2: Int) -> Int
    func calculationName() -> String
    }
    // AdditionCalculatorは、CalculatorDelegateとして扱える(処理をする側)
    class AdditionCalculator: CalculatorDelegate {
    func calculate(value1: Int, value2: Int) -> Int {
    return value1 + value2
    }
    func calculationName() -> String {
    return "足し算"
    }
    }
    // SubtractionCalculatorは、CalculatorDelegateとして扱える(処理をする側)
    class SubtractionCalculator: CalculatorDelegate {
    func calculate(value1: Int, value2: Int) -> Int {
    return value1 - value2
    }
    func calculationName() -> String {
    return "引き算"
    }
    }
    // ResultPrinterのクラス(処理を任せる側)
    class ResultPrinter {
    // 後から定義できるようにする
    var delegate: CalculatorDelegate? = nil
    func printResult(value1: Int, value2: Int) {
    if let dg = self.delegate {
    let name = dg.calculationName()
    let result = dg.calculate(value1: value1, value2: value2)
    print("\(value1)と\(value2)の\(name)した結果は\(result)です")
    } else {
    print("何もしません")
    }
    }
    }
    // 実際に使ってみる
    let rp = ResultPrinter()
    rp.printResult(value1: 5, value2: 5)
    let rp1 = ResultPrinter()
    let calc1 = AdditionCalculator()
    rp1.delegate = calc1
    rp1.printResult(value1: 5, value2: 5)
    let rp2 = ResultPrinter()
    let calc2 = SubtractionCalculator()
    rp2.delegate = calc2
    rp2.printResult(value1: 5, value2: 5)
    // 結果
    /*
    何もしません
    5と5の足し算した結果は10です
    5と5の引き算した結果は0です
    */
    // -----------------------------------
    // Delegateの利点 : 同じ仕掛けを使い回せる
    // -----------------------------------
    // MaltiplicationCalculatorは、CalculatorDelegateとして扱える
    class MaltiplicationCalculator: CalculatorDelegate {
    func calculate(value1: Int, value2: Int) -> Int {
    return value1 * value2
    }
    func calculationName() -> String {
    return "掛け算"
    }
    }
    // 実際に使ってみる
    let rp3 = ResultPrinter()
    let calc3 = MaltiplicationCalculator()
    rp3.delegate = calc3
    rp3.printResult(value1: 5, value2: 5)
    // 結果
    /*
    5と5の掛け算した結果は25です
    */

    • @akioswift
      @akioswift  2 года назад

      良いですね!他にもdelegateを使ってコードを書いてみると良いと思います!

  • @shirashira3533
    @shirashira3533 2 года назад +1

    変数には同じクラスのインスタンスしかセットできない、なるほどこの課題があったのかー

    • @akioswift
      @akioswift  2 года назад +1

      です!protocolを使うとその問題を解決できます!

  • @akioswift
    @akioswift  2 года назад

    動画を見ての感想や質問など、お気軽にコメント頂けると嬉しいですっ!