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