IT分からんわ~_~;

IT色々お勉強中のブログ

Delegateについて

Delegateについて

中々理解できなかったので、自分で分かりやすく覚えるためのメモ

  • 猫と犬がいて、犬は猫が吠えたことを検知したい

  • 検知したら犬側で何か処理をする

class Cat {
    var barkedWords = ""
    var delegate: CatDelegate?
    
    func stroke() {
        DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
            self.bark()
        }
    }
    private func bark(){
        barkedWords += "にゃん"
        delegate?.didBark()
    }
}

猫は撫でると鳴き声が追加される

protocol CatDelegate {
    func didBark()
}

準拠するためのルールを記述

プロトコルとは、具体的な処理内容は書かず、クラスや構造体が実装するプロパティとメソッドを定義する機能」

class Dog: CatDelegate {
    func didBark() {
        print(cat.barkedWords)
    }
    
    let cat: Cat
    
    init() {
        cat = Cat()
        cat.delegate = self
    }
    
    func strokeCat() {
        cat.stroke()
    }
}

犬は猫のデリゲートに準じて実装しなければならない

 cat.delegate = self

準拠したプロトコルに自分自身を入れてあげる、これでcat.delegateが犬になる

        delegate?.didBark()

犬になったdelegateがdidBarkメソッドを呼び出す

 let dog = Dog()
dog.strokeCat()
dog.strokeCat()

同じように猿にも実装できる

class Monkey: CatDelegate {
    
    var count = 0
    
    func didBark() {
        count += 1
        print(cat.barkedWords + " : " + count.description)
    }
    
    let cat: Cat
    
    init() {
        cat = Cat()
        cat.delegate = self
    }
    
    func strokeCat() {
        cat.stroke()
    }
}