3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

デリゲートの覚書

Last updated at Posted at 2015-10-19

デリゲートについて

デリゲート、デリゲート、と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)

3
5
1

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
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?