• 2022年8月25日
  • 2022年8月25日
  • Swift

デリゲートとは、開発し続けて肥大化するクラスが増えて後々メンテナンスが難しくなった時に

新しく処理を追加する際の探すコスト・またはある処理を直すコストを削減するために

処理をかき分ける手段のことをさします。

protocol:デフォルトのメソッドが置いてあるクラスのこと。デリゲートされたクラスの

メソッドの内容によって処理が変わる。

protocol MyDelegate {

    func sayHello()
    func sayName()
    func sayAge()
}
extension MyDelegate {
    func sayAge() {
        print("My age is 31")
    }
}

Person:処理を任せるためのクラス。デリゲートを任せられたクラスはここで使われる。

import Foundation
final class Person {

    var delegate: MyDelegate?  // 処理を任せる相手を保持する

    func gree() {
        guard let delegate = delegate else {
            print("デリゲートが未選択です")
            return
        }
        if type(of: delegate) == Asaba.self {
            delegate.sayHello()
            delegate.sayName()
        } else if type(of: delegate) == Jack.self {
            delegate.sayHello()
            delegate.sayName()
            delegate.sayAge()
        }
    }
}

任せられたクラスによってメソッドの動きが変わっていく。

Asaba:処理を任せられるクラスのこと。どんな処理を任せたいかを決め、protocolクラスの

デフォルトメソッドに新たなメソッドを追加する。

import Foundation
final class Asaba: greetingDelegate {

    func sayHello() {
        print("こんにちは!")
    }

    func sayName() {
        print("初めまして、asabaです!")
    }
}

viewContorrlerでは処理を任せるクラスのインスタンスを追加し、 Personクラスに任せたいAsabaクラス

を持たせる。任せたクラスのメソッドをPersonクラスで呼び出してAsabaクラスのメソッドとして

実行する。(Protocolクラスのメソッド名と名前が合っていないといけない。)

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let person = Person() 
                let asaba = Asaba() 
                person.delegate = asaba 
                person.gree()
    }
}

この組み合わせなら、どんなクラスが来ても同じような処理を書かずに一つのデリゲートクラスだけで

賄うことができます。(ただしメソッドの用途は似通っていなければならない)

ソースコードが多くなることが見込まれるアプリを作る際は使えるようにしておいたほうが

良いですね。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG