Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

デリゲートの覚書

More than 5 years have passed since last update.

デリゲートについて

デリゲート、デリゲート、とiOSアプリの作成をやったことのなかった私に取って意味不明だったこの言葉。参考書を元に調べて、何となくわかった気になって、サンプルソースを覚え書きとして残しておこうと思います。

sample.swift
sample.swift
import UIKit


class Hito {
    var car:Car?
    var bike:Bike?
}

class Car : Norimono{
    func unten(){
        print("国産車なら120km/hで運転できます")
    }
}

class Bike : Norimono{
    func unten(){
        print("バイクであっても90km/hで運転できます")
    }
}

protocol Norimono {
    func unten()
}

var taro = Hito()
taro.car = Car()
taro.bike = Bike()

taro.car?.unten()
taro.bike?.unten()

と、覚書として残していましたが、
これだと、単に親クラスからの継承と変わらずデリゲート
という意味合いは薄いように思えたので
明らかにデリゲート、というサンプルをさらに考えてみました。

sample2.swift
sample2.swift
import UIKit

class Hito {
    var delegate:Norimono?
}

class Car : Norimono{
    func unten(){
        print("国産車なら120km/hで運転できます")
    }
}

class Bike : Norimono{
    func unten(){
        print("バイクであっても90km/hで運転できます")
    }
}

class Bike2 : Norimono{
    func unten(){
        print("新型のバイクであれば130km/hで運転できます")
    }
}

protocol Norimono {
    func unten()
}

var taro = Hito()
taro.delegate = Car()
taro.delegate?.unten()

taro.delegate = Bike()
taro.delegate?.unten()

taro.delegate = Bike2()
taro.delegate?.unten()

Hito型クラスの太郎は、デリゲートとしてNorimonoプロトコルを継承した
Carであったり、Bikeであったり、Bike2を乗り替えて
ドライブ(unten)を楽しめます。と言う、話ですね。

さらに、引数なんかも持たせてみた場合のサンプルも覚書として
下記のように記載しておこうかと思います。

sample3.swift
sample3.swift
import UIKit

class Hito {
    var delegate:Norimono?
    var name:String

    init (n:String){
        self.name = n
    }
}

class Car : Norimono{
    func unten(h:Hito){
        print("\(h.name)は国産車なら120km/hで運転できます")
    }
}

class Bike : Norimono{
    func unten(h:Hito){
        print("\(h.name)はバイクであっても90km/hで運転できます")
    }
}

class Bike2 : Norimono{
    func unten(h:Hito){
        print("\(h.name)は新型のバイクであれば130km/hで運転できます")
    }
}

protocol Norimono{
    func unten(h:Hito)
}

var taro = Hito(n: "太郎")
taro.delegate = Car()
taro.delegate?.unten(taro)

var jiro = Hito(n: "二郎")
jiro.delegate = Bike()
jiro.delegate?.unten(taro)

jiro.delegate = Bike2()
jiro.delegate?.unten(jiro)

LocustRider
2018.3から兼業投資家になりました。社員数2000人弱くらいの中小企業で課長代理をしています。職種はITサービスマネージャです。毎年、最低でも2回くらいは家族で旅行が出来ればと思っています。妻、子2人の4人家族です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away